kasus ini biasanya terjadi ketika sebuah node meminta approval certificate namun tidak diapprove oleh admin (mungkin karena lupa atau tidak tau ada permintaan approval)
Biasanya node openshift akan meminta approval certificate pada waktu tertentu, jika suatu certificate tidak diapprove terkadang node yg bersangkutan akan error dan tidak melakukan request ulang secara otomatis, jadi kita perlu melakukan trigger pada node yg error untuk meminta approval certificate ulang, biasanya akan muncul error seperti dibawah ini
1 2 |
Unable to authenticate the request due to an error: x509: certificate signed by unknown authority kubelet.go:2274] node "master-00.example.com" not found |
untuk mengatasi masalah tersebut, bisa melakukan renew pada node yang sertifikatnya bermasalah
- pastikan bisa akses mengunakan oc dengan hak akses cluster-admin
1 2 |
$ oc whoami system:admin |
- cek apakah ada sertifikat CSR ada yg pending
1 |
$ oc get csr | grep Pending |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/bash set -eou pipefail # context intapi=$(oc get infrastructures.config.openshift.io cluster -o "jsonpath={.status.apiServerInternalURI}") context="$(oc config current-context)" # cluster cluster="$(oc config view -o "jsonpath={.contexts[?(@.name==\"$context\")].context.cluster}")" server="$(oc config view -o "jsonpath={.clusters[?(@.name==\"$cluster\")].cluster.server}")" # token ca_crt_data="$(oc get secret -n openshift-machine-config-operator node-bootstrapper-token -o "jsonpath={.data.ca\.crt}" | base64 --decode)" namespace="$(oc get secret -n openshift-machine-config-operator node-bootstrapper-token -o "jsonpath={.data.namespace}" | base64 --decode)" token="$(oc get secret -n openshift-machine-config-operator node-bootstrapper-token -o "jsonpath={.data.token}" | base64 --decode)" export KUBECONFIG="$(mktemp)" oc config set-credentials "kubelet" --token="$token" >/dev/null ca_crt="$(mktemp)"; echo "$ca_crt_data" > $ca_crt oc config set-cluster $cluster --server="$intapi" --certificate-authority="$ca_crt" --embed-certs >/dev/null oc config set-context kubelet --cluster="$cluster" --user="kubelet" >/dev/null oc config use-context kubelet >/dev/null cat "$KUBECONFIG" |
1 2 |
$ chmod 755 recover_kubeconfig.sh $ ./recover_kubeconfig.sh > kubeconfig-bootstrap |
1 2 3 4 |
# systemctl stop kubelet # mkdir -p /root/backup-certs # cp -a /var/lib/kubelet/pki /var/lib/kubelet/kubeconfig /root/backup-certs # rm -rf /var/lib/kubelet/pki /var/lib/kubelet/kubeconfig |
1 2 |
bastion# scp kubeconfig-bootstrap core@master00.example.com:/var/home/core # cp <kubeconfig-bootstrap> /etc/kubernetes/kubeconfig |
1 |
# systemctl start kubelet |
1 2 3 4 |
# oc get csr csr-9djn9 37s system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending # oc adm certificate approve csr-9djn9 |
tunggu beberapa waktu, biasa akan muncul satu sertifikat lagi dari node yg bermasalah
1 2 3 4 5 |
# oc get csr csr-6gb68 5s system:node:master-00.example.com Pending csr-9djn9 115s system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued #oc adm certificate approve csr-6gb68 |
setelah itu cek kembali status node, pastikan statusnya Ready
Ref:
- https://access.redhat.com/solutions/4923031
System Engineer
Komentar