日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)kubernetes教程:Kubernetes手動(dòng)輪換CA證書

手動(dòng)輪換 CA 證書

本頁展示如何手動(dòng)輪換證書機(jī)構(gòu)(CA)證書。

創(chuàng)新互聯(lián)是專業(yè)的天涯網(wǎng)站建設(shè)公司,天涯接單;提供做網(wǎng)站、網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行天涯網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

在開始之前

你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:

  • Katacoda
  • 玩轉(zhuǎn) Kubernetes

您的 Kubernetes 服務(wù)器版本必須不低于版本 v1.13. 要獲知版本信息,請(qǐng)輸入 ?kubectl version?。

手動(dòng)輪換 CA 證書 

注意:

確保備份你的證書目錄、配置文件以及其他必要文件。

這里的方法假定 Kubernetes 的控制面通過運(yùn)行多個(gè) API 服務(wù)器以高可用配置模式運(yùn)行。 另一假定是 API 服務(wù)器可體面地終止,因而客戶端可以徹底地與一個(gè) API 服務(wù)器斷開 連接并連接到另一個(gè) API 服務(wù)器。

如果集群中只有一個(gè) API 服務(wù)器,則在 API 服務(wù)器重啟期間會(huì)經(jīng)歷服務(wù)中斷期。

  1. 將新的 CA 證書和私鑰(例如:?ca.crt?、?ca.key?、?front-proxy-ca.crt? 和 ?front-proxy-client.key?)分發(fā)到所有控制面節(jié)點(diǎn),放在其 Kubernetes 證書目錄下。
  2. 更新 kube-controller-manager 的 ?--root-ca-file? 標(biāo)志,使之同時(shí)包含老的和新的 CA,之后重啟組件。
  3. 自此刻起,所創(chuàng)建的所有服務(wù)賬號(hào)都會(huì)獲得同時(shí)包含老的 CA 和新的 CA 的 Secret。

    說明: kube-controller-manager 標(biāo)志 ?--client-ca-file? 和 ?--cluster-signing-cert-file? 所引用的文件 不能是 CA 證書包。如果這些標(biāo)志和 ?--root-ca-file? 指向同一個(gè) ?ca.crt? 包文件(包含老的和新的 CA 證書), 你將會(huì)收到出錯(cuò)信息。 要解決這個(gè)問題,可以將新的 CA 證書復(fù)制到單獨(dú)的文件中,并將 ?--client-ca-file? 和 ?--cluster-signing-cert-file? 標(biāo)志指向該副本。一旦 ?ca.crt? 不再是證書包文件,就可以恢復(fù)有問題的標(biāo)志指向 ?ca.crt? 并刪除該副本。

  4. 更新所有服務(wù)賬號(hào)令牌,使之同時(shí)包含老的和新的 CA 證書。
  5. 如果在 API 服務(wù)器使用新的 CA 之前啟動(dòng)了新的 Pod,這些 Pod 也會(huì)獲得此更新并且同時(shí)信任老的和新的 CA 證書。

    base64_encoded_ca="$(base64 -w0 )"
    
    for namespace in $(kubectl get ns --no-headers | awk '{print $1}'); do
        for token in $(kubectl get secrets --namespace "$namespace" --field-selector type=kubernetes.io/service-account-token -o name); do
            kubectl get $token --namespace "$namespace" -o yaml | \
              /bin/sed "s/\(ca.crt:\).*/\1 ${base64_encoded_ca}/" | \
              kubectl apply -f -
        done
    done
  6. 重啟所有使用集群內(nèi)配置的 Pods(例如:?kube-proxy?、?coredns ?等),以便這些 Pod 能夠使用 來自 ServiceAccount Secret 中的、已更新的證書機(jī)構(gòu)數(shù)據(jù)。
    • 確保 ?coredns?、?kube-proxy? 和其他使用集群內(nèi)配置的 Pod 都正按預(yù)期方式工作。
  7. 將老的和新的 CA 都追加到 ?kube-apiserver? 配置的 ?--client-ca-file? 和 ?--kubelet-certificate-authority? 標(biāo)志所指的文件。
  8. 將老的和新的 CA 都追加到 ?kube-scheduler? 配置的 ?--client-ca-file? 標(biāo)志所指的文件。
  9. 通過替換 ?client-certificate-data? 和 ?client-key-data? 中的內(nèi)容,更新用戶賬號(hào)的證書。
  10. 另外,還要更新 kubeconfig 文件中的 ?certificate-authority-data? 節(jié),使之包含 Base64 編碼的老的和新的證書機(jī)構(gòu)數(shù)據(jù)。

  11. 遵循下列步驟執(zhí)行滾動(dòng)更新
    1. 重新啟動(dòng)所有其他 被聚合的 API 服務(wù)器 或者 Webhook 處理程序,使之信任新的 CA 證書。
    2. 在所有節(jié)點(diǎn)上更新 kubelet 配置中的 clientCAFile 所指文件以及 kubelet.conf 中的 certificate-authority-data 并重啟 kubelet 以同時(shí)使用老的和新的 CA 證書。
    3. 如果你的 kubelet 并未使用客戶端證書輪換,則在所有節(jié)點(diǎn)上更新 kubelet.conf 中 client-certificate-data 和 client-key-data 以及 kubelet 客戶端證書文件(通常位于 /var/lib/kubelet/pki 目錄下)

    4. 使用用新的 CA 簽名的證書 (apiserver.crt、apiserver-kubelet-client.crt 和 front-proxy-client.crt) 來重啟 API 服務(wù)器。 你可以使用現(xiàn)有的私鑰,也可以使用新的私鑰。 如果你改變了私鑰,則要將更新的私鑰也放到 Kubernetes 證書目錄下。
    5. 由于 Pod 既信任老的 CA 也信任新的 CA,Pod 中的客戶端會(huì)經(jīng)歷短暫的連接斷開狀態(tài), 之后再連接到使用新的 CA 所簽名的證書的新的 API 服務(wù)器。

      • 重啟調(diào)度器以使用新的 CA 證書。
      • 確??刂泼娼M件的日志中沒有 TLS 相關(guān)的錯(cuò)誤信息。

      說明: 要使用 openssl 命令行為集群生成新的證書和私鑰,可參閱 證書(openssl)。 你也可以使用cfssl.

    6. 為 Daemonset 和 Deployment 添加注解,從而觸發(fā)較安全的滾動(dòng)更新,替換 Pod。
    7. 示例:

      for namespace in $(kubectl get namespace -o jsonpath='{.items[*].metadata.name}'); do
          for name in $(kubectl get deployments -n $namespace -o jsonpath='{.items[*].metadata.name}'); do
              kubectl patch deployment -n ${namespace} ${name} -p '{"spec":{"template":{"metadata":{"annotations":{"ca-rotation": "1"}}}}}';
          done
          for name in $(kubectl get daemonset -n $namespace -o jsonpath='{.items[*].metadata.name}'); do
              kubectl patch daemonset -n ${namespace} ${name} -p '{"spec":{"template":{"metadata":{"annotations":{"ca-rotation": "1"}}}}}';
          done
      done
  12. 如果你的集群使用啟動(dòng)引導(dǎo)令牌來添加節(jié)點(diǎn),則需要更新 ?kube-public? 名字空間下的 ConfigMap ?cluster-info?,使之包含新的 CA 證書。
  13. base64_encoded_ca="$(base64 -w0 /etc/kubernetes/pki/ca.crt)"
    
    kubectl get cm/cluster-info --namespace kube-public -o yaml | \
        /bin/sed "s/\(certificate-authority-data:\).*/\1 ${base64_encoded_ca}/" | \
        kubectl apply -f -
  14. 驗(yàn)證集群的功能正常
    • 驗(yàn)證控制面組件的日志,以及 kubelet 和 kube-proxy 的日志,確保其中沒有 拋出 TLS 錯(cuò)誤。
    • 驗(yàn)證被聚合的 API 服務(wù)器的日志,以及所有使用集群內(nèi)配置的 Pod 的日志。
  15. 完成集群功能的檢查之后:
    1. 更新所有的服務(wù)賬號(hào)令牌,使之僅包含新的 CA 證書。
      • 使用集群內(nèi) kubeconfig 的 Pod 最終也需要被重啟,以獲得新的服務(wù)賬號(hào) Secret 數(shù)據(jù),進(jìn)而不再信任老的 CA 證書。
    2. 從 kubeconfig 文件和 --client-ca-file 以及 --root-ca-file 標(biāo)志所指向的文件 中去除老的 CA 數(shù)據(jù),之后重啟控制面組件。
    3. 重啟 kubelet,移除 clientCAFile 標(biāo)志所指向的文件以及 kubelet kubeconfig 文件中 的老的 CA 數(shù)據(jù)。

分享題目:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes手動(dòng)輪換CA證書
瀏覽路徑:http://www.dlmjj.cn/article/dpeogig.html