Fix Trident's expired credentials for Kubernetes API
Today I got this error on Kubernetes v1.23.4 while trying out a Trident CLI command (tridentctl):
Error: found the Kubernetes CLI, but it exited with error: Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2022-03-01T07:51:19Z is after 2022-02-17T05:32:52Z
There are many different reasons why you can hit this but I'll focus just one one, specific to this issue with Trident.
tridentctl uses KUBECONFIG, so when tridentctl doesn't work that's the first thing to check: is kubeconfig there, is it accessible, etc.
The file was there and accessible but API certificate has expired, I thought. Instinctively I tried to renew the certificates.
The below is overkill because it renews all of them, but I didn't care because it's a home lab.
kubeadm certs renew all
This didn't work - of course - because … my kubeconf wasn't valid. Doh!
So I ran the same again but with sudo which read the valid kubeconfig file from its default location on my system, /etc/kubernetes/admin.conf.
I rebooted all involved nodes (I have only three so I had to restart services on all of them, one by one). You could also restart affected services, but I didn't care to find out how to do that so I just rebooted.
Then I tried again, and this time I got a different error.
Found the Kubernetes CLI, but it exited with error: error: You must be logged in to the server (the server has asked for the client to provide credentials)
Now I realized wher the problem was. I copied /etc/kubernetes/admin.conf to ~/.kube/config and was able to use tridentctl:
sean@k1:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k1 Ready control-plane,master 377d v1.23.4
k2 Ready <none> 339d v1.23.4
k3 Ready <none> 377d v1.23.4
sean@k1:~$ ./trident-21.01/bin/tridentctl -n trident get backend
+--------------------------+----------------+--------------------------------------+--------+---------+
| NAME | STORAGE DRIVER | UUID | STATE | VOLUMES |
+--------------------------+----------------+--------------------------------------+--------+---------+
| solidfire_192.168.103.34 | solidfire-san | 8d516181-3c2d-4ca5-bba9-b875725f5646 | online | 0 |
+--------------------------+----------------+--------------------------------------+--------+---------+
So it's likely that I didn't need to renew certificates at all.
I didn't check beforehand but it's possible /etc/kubernetes/admin.conf was okay the whole time - I could have copied it over my ~/.kube/config and changed the ownership: that could have been enough.