🤖
kubectl get nodesで The connection to the server xxx was refusedが出た時の対応
ケース例
ワーカーノードでkubectl get nodes
を実行した際に以下のようになった場合についての対応を示す.
ubuntu@wk-node2:~$ kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
- 注意
- 本記事の対象はコントロールプレーンではない
- コントロールプレーンでは以下のとおりノード情報が取得できているものとする
ubuntu@cp-node1:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-10-10-10-147 NotReady control-plane 23h v1.24.2
wk-node1 NotReady <none> 23m v1.24.2
wk-node2 NotReady <none> 23m v1.24.2
対応
まず,kubectl config view
を実行して設定状況を確認する.
apiVersion: v1
clusters: null
contexts: null
current-context: ""
kind: Config
preferences: {}
users: null
上記のように設定が空の場合,以下を実行する.
mkdir -p $HOME/.kube \
&& sudo cp -i /etc/kubernetes/kubelet.conf $HOME/.kube/config \
&& sudo chown $(id -u):$(id -g) $HOME/.kube/config
これにより,再度kubectl config view
を実行すると,以下のとおりnull
だった要素およびコンテキスト情報が埋められる.
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://xxx.xxx.xxx.xxx:6443
name: default-cluster
contexts:
- context:
cluster: default-cluster
namespace: default
user: default-auth
name: default-context
current-context: default-context
kind: Config
preferences: {}
users:
- name: default-auth
user:
client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
client-key: /var/lib/kubelet/pki/kubelet-client-current.pem
事後確認
再度kubectl get nodes
を実行し,ノード情報が正常に取得されることを確認する.
ubuntu@wk-node2:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-10-10-10-147 NotReady control-plane 24h v1.24.2
wk-node1 NotReady <none> 99m v1.24.2
wk-node2 NotReady <none> 98m v1.24.2
Discussion
ノードの
/etc/kubernetes/kubelet.conf
はそのノードの kubelet が Kubernetes API を操作する際に使うもので、ユーザがオペレーションのために使うのにはふさわしくなく避けたほうがよいです。kubelet ができる操作は限定されているため、ノードのリストやそのノード上で実行されている Pod の操作等しかできません。コントロールプレーンノードの
/etc/kubernetes/admin.conf
を使うか、クラスタで X509 クライアント証明書や OIDC などの認証を有効にして RBAC で必要な権限を付与することが望ましいです。コメントいただきありがとうございます.
実際的な運用においては,コントロールプレーンから
admin.conf
を持ってきて一時的に.kube/config
として利用しCertificate Signing Requests に従ってX.509の設定をし,その後Using RBAC Authorizationで以ってユーザを妥当な権限を付与したClusterRoleへバインドするのがベターですね.