Kubernetes TLS Certificates & kubeadm certs

๐Ÿ’ก Kubernetes TLS Certificates & kubeadm certs โ€” Executive Summary

Technical architectural analysis, practical configuration manifests, and deployment instructions for Kubernetes TLS Certificates & kubeadm certs.

Automated script
  • โ€“ When renewing after expiration

    Attempt to bootstrap

    We will summarize the recovery sequence assuming the worst case scenario where bootstrapping is not set and both the control plane and kubelet certificates have already expired.

    In this case, kubectl will not work because the API server is dead. Therefore, you must save the control plane first and then sequentially revive the kubelets of the nodes.

    โ€”

    ### Step 1: Renew control plane (Master) certificate

    First, the certificates used by the API server, scheduler, and controller manager must be renewed to revive the โ€œbrainโ€ of the cluster.

    1. Check current expiration statusBash

    kubeadm certs check-expiration

    2. Renew all control plane certificatesBash

    kubeadm certs renew all

    3. Restart Static Pods
    The certificate file has been updated, but kube-apiserver, which is already in memory, contains the old certificate. Forces a restart of Bash to read the file again.

    # If you move the manifest file for a while and then import it again, the container will restart.
    mv /etc/kubernetes/manifests/*.yaml /tmp/
    sleep 10
    mv /tmp/*.yaml /etc/kubernetes/manifests/

    4. Update the admin configuration file (admin.conf)Replace my local .kube/config with the new file so that I can use kubectl.Bash

    cp /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config

    โ€”

    ### Step 2: Prepare for manual renewal of Kubelet certificate (if bootstrap is not set)

    Without bootstrapping (bootstrap-kubelet.conf), the kubelet has no way to obtain the certificate itself. In this case, you must use the function of kubeadm to temporarily open an authentication path.

    1. Grant RBAC permission (run on master)
    Temporarily grant permission for the kubelet to send a certificate signing request (CSR). (Can be omitted if already set) Bash

    kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --group=system:bootstrappers

    2. Generate a new bootstrap tokenBash

    kubeadm token create --print-join-command

    Copy the token generated here.

    โ€”

    ### Step 3: Kubelet recovery on each node (Worker/Master)

    Now go to each node and have it issue a new certificate, ignoring the expired kubelet-client-current.pem.

    1. Stop Kubelet and remove existing certificateBash

    systemctl stop kubelet
    # Remove expired certificates and symbolic links
    rm /var/lib/kubelet/pki/kubelet-client-*.pem
    rm /var/lib/kubelet/pki/kubelet-client-current.pem

    2. Regenerate kubelet.conf (Important)
    If bootstrapping is not performed, the certificate information in /etc/kubernetes/kubelet.conf may also have expired. Reconfigure this file using kubeadm.Bash

    # Run on node (using token and address received from master)
    kubeadm join :6443 --token --discovery-token-ca-cert-hash sha256: --control-plane (add only if master)

    If the node is already joined, you may need the --force option, or you may need to back up and run the existing .conf files in /etc/kubernetes/.

    3. Starting KubeletBash

    systemctl start kubelet

    โ€”

    ### Step 4: CSR approval (run on master)

    The Kubelet comes to life and sends a request to the master, saying โ€œIโ€™m new, please authenticate me.โ€

    1. Check request listBash

    kubectl get csr

    2. ApproveBash

    # Approval of all CSRs in Pending status
    kubectl get csr | grep Pending | awk '{print $1}' | xargs kubectl certificate approve

    โ€”

    ### Summary order

    1. Master: kubeadm certs renew all and then restart the Static Pod.
    2. Master: Update admin.conf to revive kubectl.
    3. Master: Secure a new path with kubeadm token create.
    4. Node: Delete the existing kubelet-client-*.pem.
    5. Node: Attempt re-authentication with the kubeadm join command (or update relevant settings).
    6. Final approval with Master: kubectl certificate approve.

    After completing this procedure, kubectl get nodes will return all nodes to the Ready state. Version 1.23 is a stable version of kubeadm‘s certificate management commands, so the above commands should work well.

    Ignore bootstrapping

    The key to manually recovering expired control planes and kubelets without using bootstrapping (Token-based auto-join) is \*\*โ€creating the certificate files yourself and updating kubeconfig manuallyโ€\*\*

    This method does not require kubeadm join or token, but only uses kubeadm‘s certificate renewal function and file copy.

    โ€”

    ### Step 1: Manually renew the control plane (Master) certificate

    First of all, you need to save the โ€˜Certification Authority (CA)โ€™ and API server related certificates.

    1. Control plane certificate bulk renewalBash

    kubeadm certs renew all

    2. Restart Static Pods (Load Certificate)Bash

    # Move the manifest for a while and copy it to induce a container restart
    mv /etc/kubernetes/manifests/*.yaml /tmp/
    sleep 5
    mv /tmp/*.yaml /etc/kubernetes/manifests/

    3. Update kubeconfig for administratorBash

    cp /etc/kubernetes/admin.conf $HOME/.kube/config

    โ€”

    ### Step 2: Manually update the configuration file (kubelet.conf) for Kubelet

    If you do not use bootstrapping, you must manually update the client certificate data in the /etc/kubernetes/kubelet.conf file. kubeadm provides dedicated commands for this process.

    \[Performed on all nodes (including Master)\]

    1. Renew certificate in kubelet configuration fileBash

    kubeadm init phase kubeconfig kubelet --config /etc/kubernetes/kubeadm-config.yaml (or can be omitted if using default)

    This command creates a new file /etc/kubernetes/kubelet.conf and includes the new embedded certificate inside it.

    2. Clean up existing individual PEM filesBash

    If you do not use bootstrapping, the data in /etc/kubernetes/kubelet.conf will be referenced first, not kubelet-client-current.pem in /var/lib/kubelet/pki/. Leave existing files aside to avoid conflicts.

    rm -f /var/lib/kubelet/pki/kubelet-client-*.pem
    rm -f /var/lib/kubelet/pki/kubelet-client-current.pem

    โ€”

    ### Step 3: Restart Kubelet services and check permissions

    Now let the kubelet on each node read the new kubelet.conf and communicate with the API server.

    1. Restart KubeletBash

    systemctl restart kubelet

    2. CSR manual approval (if necessary)Bash

    In some environments, the kubelet may request additional serving certificates even after updating kubelet.conf. The master confirms and approves.

    kubectl get csr
    kubectl certificate approve

    โ€”

    ### Step 4: How do I get kubelet-client-current.pem back?

    The /var/lib/kubelet/pki/kubelet-client-current.pem file that the user mentioned at the beginning of the question is actually a file created when Kubelet’s Rotation feature is turned on.

    If you want to keep this file again without bootstrapping, your kubelet configuration (config.yaml) with kubelet.conf updated must include:

    โ€“ rotateCertificates: true
    โ€“ serverTLSBootstrap: true (optional)

    ### Organized command flow chart

    Step Execution Location Command
    1. CP Renewal Master kubeadm certs renew all
    2. Update settings all nodes kubeadm init phase kubeconfig kubelet
    3. Organize your files all nodes rm -f /var/lib/kubelet/pki/kubelet-client*
    4. Restart all nodes systemctl restart kubelet

    This way, you can manually replace the certificate and operate normally through the static configuration file created by kubeadm without going through the token-based bootstrapping (bootstrap-kubelet.conf) process.

    When running kubeadm init phase, does an error occur saying that a specific configuration file cannot be found? Please let me know if you need a kubeadm-config dump for that cluster.

Basis
References and Guidelines (NOTE)

The client certificate created with kubeadm expires after one year.

bash
# kubectl ๋ช…๋ น์–ด ์‚ฌ์šฉ์‹œ
Unable to connect to the server: x509: certificate has expired or is not yet valid.
Check certificate expiration time
shell
sudo kubeadm certs check-expiration
#>>> ์ถœ๋ ฅ
#[check-expiration] Reading configuration from the cluster...
#[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
#W0818 13:43:59.620410 4001964 utils.go:69] The recommended value for "clusterDNS" in "KubeletConfiguration" is: [10.233.0.10]; the provided value is: [10.233.0.3]
#
#CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
#admin.conf                 Aug 17, 2024 01:21 UTC   364d            ca                      no
#apiserver                  Aug 17, 2024 01:21 UTC   364d            ca                      no
#apiserver-kubelet-client   Aug 17, 2024 01:21 UTC   364d            ca                      no
#controller-manager.conf    Aug 17, 2024 01:21 UTC   364d            ca                      no
#front-proxy-client         Aug 17, 2024 01:21 UTC   364d            front-proxy-ca          no
#scheduler.conf             Aug 17, 2024 01:21 UTC   364d            ca                      no
#
#CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
#ca                      Aug 14, 2032 13:09 UTC   8y              no
#front-proxy-ca          Aug 14, 2032 13:09 UTC   8y              no
#<<<
Perform
Tasks
bash
# ๋ชจ๋“  master ๋…ธ๋“œ
kubeadm certs renew all #or ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐฑ์‹ 

# ๊ฐฑ์‹ ๋œ kubeapiserver config CLI ์ธ์ฆ์— ์‚ฌ์šฉ
mv ~/.kube/config ~/.kube/config-backup
cp /etc/kubernetes/admin.conf ~/.kube/config

# !! kubeconfig๋ฅผ ์ปค์Šคํ…€ํ•ด์„œ ์‚ฌ์šฉ์ค‘์ด๋ผ๋ฉด ์ „์ฒด ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์•„๋ž˜์˜ ๋‚ด์šฉ๋งŒ ๊ฐฑ์‹ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
#    client-certificate-data: <crt-sting>
#    client-key-data: <key-string>
Additional tasks
References and Guidelines (NOTE)

Among the logic below, kubeadm init phase kubeconfig may have been reflected in kubeadm certs renew all, so you need to check.

  • Check that admin.conf is actually reflected
  • Confirm that kubelet.conf is not reflected.
  • Need to check scheduler.conf, controller-manager.conf

There is a possibility of unauthorized occurrence because the static pod is not restarted.

  • master nodes
Error Logs (kube-scheduler)
bash
W0820 05:54:38.069851       1 reflector.go:324] vendor/k8s.io/client-go/informers/factory.go:134: failed to list *v1.PersistentVolumeClaim: Unauthorized
  E0820 05:54:38.069907       1 reflector.go:138] vendor/k8s.io/client-go/informers/factory.go:134: Failed to watch *v1.PersistentVolumeClaim: failed to list *v1.PersistentVolumeClaim: Unauthorized
  W0820 05:54:38.943924       1 reflector.go:324] vendor/k8s.io/client-go/informers/factory.go:134: failed to list *v1.StatefulSet: Unauthorized
  E0820 05:54:38.943996       1 reflector.go:138] vendor/k8s.io/client-go/informers/factory.go:134: Failed to watch *v1.StatefulSet: failed to list *v1.StatefulSet: Unauthorized
  W0820 05:54:39.911036       1 reflector.go:324] vendor/k8s.io/client-go/informers/factory.go:134: failed to list *v1.CSINode: Unauthorized
  E0820 05:54:39.911123       1 reflector.go:138] vendor/k8s.io/client-go/informers/factory.go:134: Failed to watch *v1.CSINode: failed to list *v1.CSINode: Unauthorized
  W0820 05:54:41.927021       1 reflector.go:324] vendor/k8s.io/client-go/informers/factory.go:134: failed to list *v1.Pod: Unauthorized
  E0820 05:54:41.927132       1 reflector.go:138] vendor/k8s.io/client-go/informers/factory.go:134: Failed to watch *v1.Pod: failed to list *v1.Pod: Unauthorized
  • How to reissue a certificate (highly unlikely to be needed)
bash
# ์ธ์ฆ์„œ ๊ฐฑ์‹  ํ›„ kube-scheduler, kube-controller-manager ์ธ์ฆ์—๋Ÿฌ ๋ฐœ์ƒ
    # ํด๋ผ์ด์–ธํŠธ์ธ์ฆ์„œ ๋ฏธ์‚ฌ์šฉ์œผ๋กœ ์ธํ•จ

    # ๋ฐฑ์—… ํ›„ ์‚ญ์ œ
    mv /etc/kubernetes/scheduler.conf /etc/kubernetes/scheduler.conf.bak
    mv /etc/kubernetes/controller-manager.conf /etc/kubernetes/controller-manager.conf.bak
    mv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubelet.conf.bak

    # ์‚ญ์ œ๋˜์–ด์žˆ์–ด์•ผ ์‹ ๊ทœ๋ฐœ๊ธ‰๋จ
    kubeadm init phase kubeconfig scheduler
    kubeadm init phase kubeconfig controller-manager
    kubeadm init phase kubeconfig kubelet
  • How to apply a reissued certificate
bash
# kubelet ์žฌ์‹œ์ž‘
    mkdir ~/kubelet-backup
    mv /var/lib/kubelet/pki/* ~/kubelet-backup
    systemctl restart kubelet

    cd /etc/kubernetes/manifests
    # ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ
    mv kube-controller-manager.yaml ..
    mv kube-scheduler.yaml ..
    # ์ค‘์ง€ ํ™•์ธ
    kubectl -n kube-system get pods -l 'component in (kube-controller-manager,kube-scheduler)'
    # ์žฌ์‹œ์ž‘
    mv ../kube-controller-manager.yaml .
    mv ../kube-scheduler.yaml .
  • worker nodes
bash
# ์•„๋ž˜์™€๊ฐ™์ด ํŒŒ์ผ๋กœ๋ช…์‹œ๋˜์–ด์žˆ์œผ๋ฉด ์ž๋™๊ฐฑ์‹  ๋˜๊ณ  ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ. ๋งˆ์Šคํ„ฐ๋…ธ๋“œ๋„ ํ•ด๋‹น์„ค์ •๋˜์–ด์žˆ์œผ๋ฉด ์กฐ์น˜X 
  grep client-certificate /etc/kubernetes/kubelet.conf
      client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
Olds
old

##### Action\*\*\*\*: Run on each master node\*\*\*\*

1. Backup

shell
# [[ master node ]]
   ## kube pki backup
   sudo mkdir -p $HOME/fcik8s-old-certs/pki
   sudo mkdir -p $HOME/fcik8s-old-certs/kubelet
   sudo mkdir -p $HOME/fcik8s-old-certs/.kube
   sudo cp -p /etc/kubernetes/pki/*.* $HOME/fcik8s-old-certs/pki
   sudo cp -p /etc/kubernetes/*.conf $HOME/fcik8s-old-certs
   sudo cp -p /var/lib/kubelet/pki/* $HOME/fcik8s-old-certs/kubelet
   sudo cp -p ~/.kube/config $HOME/fcik8s-old-certs/.kube/.

2. Update

shell
sudo kubeadm certs renew all --config=/etc/kubernetes/kubeadm-config.yaml
   >>>
   W0818 10:21:42.676045 3888005 utils.go:69] The recommended value for "clusterDNS" in "KubeletConfiguration" is: [10.233.0.10]; the provided value is: [10.233.0.3]
   certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself renewed
   certificate for serving the Kubernetes API renewed
   certificate for the API server to connect to kubelet renewed
   certificate embedded in the kubeconfig file for the controller manager to use renewed
   certificate for the front proxy client renewed
   certificate embedded in the kubeconfig file for the scheduler manager to use renewed

   Done renewing certificates. You must restart the kube-apiserver, kube-controller-manager, kube-scheduler and etcd, so that they can use the new certificates.
   <<<
   # ํ™•์ธ
   sudo kubeadm certs check-expiration

   # kublet ์žฌ์‹œ์ž‘
   #systemctl daemon-reload&&systemctl restart kubelet

   # control-plane components ์ข…๋ฃŒ
   sudo cp -pr /etc/kubernetes/manifest $HOME/fcik8s-old-certs
   sudo rm /etc/kubernetes/manifest/*

   # componets container ํ”„๋กœ์„ธ์Šค ํ™•์ธ
   sudo nerdctl ps

   # control-plane components ์žฌ์‹œ์ž‘
   sudo cp -p $HOME/fcik8s-old-certs/manifest/* /etc/kubernetes/manifest

   kubectl get pods -n kube-system -l component=kube-apiserver
   kubectl get pods -n kube-system -l component=kube-controller-manager
   kubectl get pods -n kube-system -l component=kube-scheduler
   kubectl get pods -n kube-system -l component=etcd

   kubectl get nodes

3. Issue tracking

shell
# log ํ™•์ธ
   journalctl -u kubelet -f
   journalctl -u etcd -f
   journalctl -u containerd -f
   kubectl logs -n kube-system -l component=kube-apiserver
   kubectl logs -n kube-system -l component=kube-controller-manager
   kubectl logs -n kube-system -l component=kube-scheduler
   kubectl logs -n kube-system -l component=etcd

   #!! kubeadm 1.17 ์ด์ „์˜ ๋ฒ„์ „์—์„œ kubeadm init ์œผ๋กœ ์ž‘์„ฑ๋œ Node ์—๋Š” kubelet.conf ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค.
   ## ์ตœ๋Œ€ 5๋ถ„๋™์•ˆ ์ ์šฉ์—ฌ๋ถ€ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•„์š”
   kubectl get nodes #์ •์ƒ์กฐํšŒ ๋ถˆ๊ฐ€ํ•˜๋‹ค๋ฉด kubelet ๊ตฌ์„ฑ ํ˜น์€ kubeconfig ํŒŒ์ผ ํ™•์ธ ํ•„์š”

   ### error: You must be logged in to the server (Unauthorized) ๋ฐœ์ƒ์‹œ
   ### -> [2] ์กฐ์น˜์‚ฌํ•ญ ํ™•์ธ

   ### [1] kubelet.conf ๋ฏธ๊ฐฑ์‹ ์˜ ๊ฒฝ์šฐ
   sudo diff $HOME/fcik8s-old-certs/kubelet.conf /etc/kubernetes/kubelet.conf #์ฐจ์ด๊ฐ€ ์—†์œผ๋ฉด ๋ฏธ๊ฐฑ์‹ 

   ## ์‚ฌ์šฉ ์ „ ๋ถ„์„ ํ•„์š”
   #cd /etc/kubernetes
   sudo kubeadm kubeconfig user --org system:nodes --client-name system:node:$(hostname) > kubelet.conf

   # kubelet.conf์— ํŒŒ์ผ๋กœ ๋ช…์‹œํ•œ๋‹ค๋ฉด
   ### [1-2] v1.23.7์—์„œ ํ™•์ธ์‹œ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š์€๊ฒƒ์ด ์ •์ƒ์œผ๋กœ ๋ณด์ž„
   sudo diff $HOME/fcik8s-old-certs/kubelet.conf /etc/kubernetes/kubelet.conf
   sudo diff $HOME/fcik8s-old-certs/kubelet/kubelet-client-current.pem /var/lib/kubelet/pki/kubelet-client-current.pem
   sudo diff $HOME/fcik8s-old-certs/kubelet/kubelet.key /var/lib/kubelet/pki/kubelet.key
   sudo diff $HOME/fcik8s-old-certs/kubelet/kubelet.crt /var/lib/kubelet/pki/kubelet.crt

   ### [2] kubeconfig ๋ฏธ๊ฐฑ์‹ ์˜ ๊ฒฝ์šฐ
   sudo diff ~/.kube/config $HOME/fcik8s-old-certs/.kube/config #์ฐจ์ด๊ฐ€ ์—†์œผ๋ฉด ๋ฏธ๊ฐฑ์‹ 
   cat /etc/kubernetes/kubelet.conf # ๋‚ด์šฉ ์ฐธ์กฐํ•˜์—ฌ ์‚ฝ์ž…. ํŒŒ์ผ์˜ ๊ฒฝ์šฐ [์—ฌ๊ธฐ](<https://www.notion.so/cmd-cm-base64-d7e4a9892c6a4eaf8abc0e9ec1a13684?pvs=21>) ์ฐธ์กฐ
   client-certificate -> ~/.kube./config:client-certificate-data
   client-key -> ~/.kube./config:client-key-data

   systemctl daemon-reload&&systemctl restart kubelet
   kubectl get nodes

4. Reference: Previous version update

[SKT Enterprise](https://www.sktenterprise.com/bizInsight/blogDetail/dev/2918)

shell
# [[ master node ]]
   ### **1. ์ธ์ฆ์„œ๊ฐ€ ์กด์žฌํ•˜๋Š” pki ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ฐฑ์—…ํ•ฉ๋‹ˆ๋‹ค.**
   cp -f /etc/kubernetes/pki /etc/kubernetes/pki-backup

   ### **2. ์ธ์ฆ์„œ๋ฅผ ์ผ๊ด„์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•ฉ๋‹ˆ๋‹ค.**
   kubeadm certs renew all

   ### **3. ๊ฐฑ์‹  ์—ฌ๋ถ€๋ฅผ ๋‹ค์‹œ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.**
   [12:56:54][danawa@kube3 /etc/kubernetes/pki]
   $ openssl x509 -in apiserver.crt -noout -text |grep ' Not '
               Not Before: Mar 25 08:12:56 2020 GMT
               Not After : Mar 28 02:26:40 2023 GMT

   #์ •์ƒ์ ์œผ๋กœ 1๋…„ ์—ฐ์žฅ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

   ### **4. ์‚ฌ์šฉ์ž ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ์œ„ํ•ด kubernetes ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ฐฑ์—…ํ•ฉ๋‹ˆ๋‹ค.**
   cp -f /etc/kubernetes /etc/kubernetes-backup

   ### **5. ์‚ฌ์šฉ์ž ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.**
   kubeadm kubeconfig user --client-name=admin --config=/etc/kubernetes/kubeadm-config.yaml
   kubeadm kubeconfig user --org system:masters --client-name=kubernetes-admin --config=/etc/kubernetes/kubeadm-config.yaml > /etc/kubernetes/admin.conf
   kubeadm kubeconfig user --client-name system:kube-controller-manager --config=/etc/kubernetes/kubeadm-config.yaml > /etc/kubernetes/controller-manager.conf
   kubeadm kubeconfig user --org system:nodes --client-name system:node:$(hostname) --config=/etc/kubernetes/kubeadm-config.yaml > /etc/kubernetes/kubelet.conf
   kubeadm kubeconfig user --client-name system:kube-scheduler --config=/etc/kubernetes/kubeadm-config.yaml > /etc/kubernetes/scheduler.conf

   ### **6. /root/.kube/config๋ฅผ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.**
   cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
   chown $(id -u):$(id -g) $HOME/.kube/config

   ### **7. ์„œ๋น„์Šค๋ฅผ ์žฌ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.**
   systemctl daemon-reload&&systemctl restart kubelet

   ### csr approve
   kubectl certificate approve $(kubectl get csr | grep Pending | awk '{print $1}' |  sed -z 's/[\\n\\r]/ /g')

   # [[ worker node ]]
   ## master์—์„œ ๋ณต์‚ฌํ•œ ํ›„ ๋ถ™์—ฌ๋„ฃ๊ธฐ
   vi /etc/kubernetes/kubelet.conf
   >>>
   # ์•„๋ž˜ ip locahost๋กœ ์ˆ˜์ •
   server: <https://localhost:6443>
   <<<
   systemctl restart kubelet
shell
# systemctl ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ
   systemctl restart kube-apiserver
   systemctl restart kube-scheduler

   # ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ
   docker restart [apiserver ์ปจํ…Œ์ด๋„ˆ]
   docker restart [scheduler ์ปจํ…Œ์ด๋„ˆ]
   docker restart [controller ์ปจํ…Œ์ด๋„ˆ]

##### Other methods

###### References

[Certificate Management with kubeadm](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#automatic-certificate-renewal)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *