成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linkerd 2.10(Step by Step) (三)自動輪換控制平面 TLS 與 Webhook TLS 憑證

網絡 通信技術
Linkerd 的自動 mTLS 功能使用一組 TLS 憑據(jù)(TLS credentials)為代理生成 TLS 證書(TLS certificates):信任錨(trust anchor)、頒發(fā)者證書(issuer certificate)和私鑰(private key)。

[[405758]]

Linkerd 2.10 系列

  • 快速上手 Linkerd v2 Service Mesh(服務網格)
  • 騰訊云 K8S 集群實戰(zhàn) Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 應用
  • 詳細了解 Linkerd 2.10 基礎功能,一起步入 Service Mesh 微服務架構時代
  • Linkerd 2.10(Step by Step)—1. 將您的服務添加到 Linkerd
  • Linkerd 2.10(Step by Step)—2. 自動化的金絲雀發(fā)布
  • Linkerd 2.10 中文手冊持續(xù)修正更新中:

https://linkerd.hacker-linner.com

自動輪換控制平面 TLS 憑證

Linkerd 的自動 mTLS 功能使用一組 TLS 憑據(jù)(TLS credentials)為代理生成 TLS 證書(TLS certificates):信任錨(trust anchor)、頒發(fā)者證書(issuer certificate)和私鑰(private key)。雖然 Linkerd 每 24 小時自動輪換數(shù)據(jù)平面代理的 TLS 證書, 但它不會輪換用于頒發(fā)這些證書的 TLS 憑據(jù)。在本文檔中,我們將描述如何使用外部解決方案 自動輪換頒發(fā)者證書和私鑰。

(請注意,Linkerd 的信任錨仍然必須在 long-lived 集群上手動輪換)

Cert manager

Cert-manager 是一個流行的項目,用于使來自外部來源的 TLS 憑證(TLS credentials)可用于 Kubernetes 集群。

第一步,在您的集群上安裝 cert-manager。

如果您要安裝 cert-manager >= 1.0, 則需要 kubernetes >= 1.16。cert-manager 中用于 kubernetes <= 1.15 的傳統(tǒng)自定義資源定義沒有 keyAlgorithm 選項, 因此證書將使用 RSA 生成并且與 linkerd 不兼容。

有關版本要求的更多詳細信息,請參閱 v0.16 到 v1.0 升 級說明。

Cert manager 作為集群上的證書頒發(fā)機構(CA)

在這種情況下,我們不會從外部來源(external source)獲取憑據(jù), 而是將其配置為集群上的 CA, 并讓它定期重新頒發(fā) Linkerd 的頒發(fā)者證書(issuer certificate)和私鑰(private key)。

首先,創(chuàng)建 cert-manager 將用來存儲其 Linkerd 相關資源的命名空間。為簡單起見,我們建議使用默認的 Linkerd 控制平面命名空間:

  1. kubectl create namespace linkerd 

將簽名密鑰對(signing key pair)保存為 Secret

接下來,使用 step 工具, 創(chuàng)建一個簽名密鑰對(signing key pair)并將其存儲在上面創(chuàng)建的 命名空間中的 Kubernetes Secret 中:

  1. step certificate create root.linkerd.cluster.local ca.crt ca.key \ 
  2.   --profile root-ca --no-password --insecure && 
  3.   kubectl create secret tls \ 
  4.     linkerd-trust-anchor \ 
  5.     --cert=ca.crt \ 
  6.     --key=ca.key \ 
  7.     --namespace=linkerd 

對于壽命更長(longer-lived)的信任錨證書,將 --not-after 參數(shù)傳遞 給具有所需值(desired value)的 step 命令(例如 --not-after=87600h)。

創(chuàng)建引用密鑰(referencing the secret)的頒發(fā)者(Issuer)

有了 Secret,我們可以創(chuàng)建一個引用它的 cert-manager "Issuer" 資源:

  1. cat <<EOF | kubectl apply -f - 
  2. apiVersion: cert-manager.io/v1 
  3. kind: Issuer 
  4. metadata: 
  5.   name: linkerd-trust-anchor 
  6.   namespace: linkerd 
  7. spec: 
  8.   ca: 
  9.     secretName: linkerd-trust-anchor 
  10. EOF 

頒發(fā)證書(Issuing certificates)并將它們寫入一個 secret

最后,我們可以創(chuàng)建一個 cert-manager "Certificate" 資源, 它使用這個 Issuer 來生成所需的證書:

  1. cat <<EOF | kubectl apply -f - 
  2. apiVersion: cert-manager.io/v1 
  3. kind: Certificate 
  4. metadata: 
  5.   name: linkerd-identity-issuer 
  6.   namespace: linkerd 
  7. spec: 
  8.   secretName: linkerd-identity-issuer 
  9.   duration: 48h 
  10.   renewBefore: 25h 
  11.   issuerRef: 
  12.     name: linkerd-trust-anchor 
  13.     kind: Issuer 
  14.   commonName: identity.linkerd.cluster.local 
  15.   dnsNames: 
  16.   - identity.linkerd.cluster.local 
  17.   isCA: true 
  18.   privateKey: 
  19.     algorithm: ECDSA 
  20.   usages: 
  21.   - cert sign 
  22.   - crl sign 
  23.   - server auth 
  24.   - client auth 
  25. EOF 

(在上面的 YAML 清單中,duration key 指示 cert-manager 將 證書視為有效 48 小時,而 renewBefore key 指示 cert-manager 將嘗試在當前證書到期前 25 小時頒發(fā)新證書。這些值可以根據(jù)您的喜好定制。)

此時,cert-manager 現(xiàn)在可以使用此證書資源(Certificate resource) 獲取 TLS 憑據(jù)(TLS credentials), 該憑據(jù)將存儲在名為 linkerd-identity-issuer 的 secret 中。要驗證您新頒發(fā)的證書,您可以運行:

  1. kubectl get secret linkerd-identity-issuer -o yaml -n linkerd 

現(xiàn)在我們只需要通知 Linkerd 使用這些憑據(jù)。

由于 cert-manager 中的 bug, 如果您將 cert-manager 版本 0.15 與實驗控制器(experimental controllers)一起使用, 則它頒發(fā)的證書與 Linkerd 版本 <= stable-2.8.1 不兼容。

您的 linkerd-identity pod 可能會因以下日志輸出而崩潰:

  1. "Failed to initialize identity service: failed to read CA from disk: 
  2. unsupported block type: 'PRIVATE KEY'

解決此問題的一些可能方法是:

  • 將 Linkerd 升級到包含修復程序的邊緣版本 >= edge-20.6.4。
  • 將 cert-manager 升級到版本 >= 0.16。(如何升級)
  • 關閉 cert-manager 實驗控制器(experimental controllers)。(docs)

替代 CA 提供商

您可以將 Cert Manager 配置為依賴于許多其他解決方案, 例如 Vault, 而不是使用 Cert Manager 作為 CA。可以在此處找到 有關如何設置現(xiàn)有證書管理器 以使用不同類型的頒發(fā)者的更多詳細信息。

第三方證書管理解決方案

需要注意的是,Linkerd 提供的機制也可以在 cert-manager 之外使用。Linkerd 將讀取 linkerd-identity-issuer Secret, 如果它是 kubernetes.io/tls 類型,將使用內容作為其 TLS 憑證(TLS credentials)。這意味著任何能夠通過將 TLS 證書(certificates)寫入此密鑰 來輪換它們的解決方案都可用于提供動態(tài) TLS 證書管理。

在 CLI 安裝中使用這些憑據(jù)

對于 CLI 安裝,Linkerd 控制平面應該 與 --identity-external-issuer 標志一起安裝, 該標志指示 Linkerd 從 linkerd-identity-issuer secret 讀取證書。每當更新存儲在 secret 中的 certificate 和 key 時, identity 服務將自動檢測此更改并重新加載新憑據(jù)。

瞧!我們已經設置了 Linkerd 控制平面 TLS 憑據(jù)的自動輪換。如果你想監(jiān)控更新過程,你可以檢查服務發(fā)出的 IssuerUpdated 事件:

  1. kubectl get events --field-selector reason=IssuerUpdated -n linkerd 

使用 Helm 安裝

對于 Helm 安裝,而不是運行 linkerd install, 將 identityTrustAnchorsPEM 設置為 linkerd-identity-issuer Secret 中 ca.crt 的值:

  1. helm install linkerd2 \ 
  2.   --set-file identityTrustAnchorsPEM=ca.crt \ 
  3.   --set identity.issuer.scheme=kubernetes.io/tls \ 
  4.   --set installNamespace=false \ 
  5.   linkerd/linkerd2 \ 
  6.   -n linkerd 

對于低于 v3 的 Helm 版本,必須專門傳遞 --name 標志。在 Helm v3 中,它已被棄用,并且是上面指定的第一個參數(shù)。

自動輪換 Webhook TLS 憑證

Linkerd 控制平面包含幾個組件,稱為 webhooks, 由 Kubernetes 本身直接調用。從 Kubernetes 到 Linkerd webhooks 的流量使用 TLS 進行保護, 因此每個 webhooks 都需要一個包含 TLS 憑據(jù)的 secret。這些證書與 Linkerd 代理用于保護 pod 到 pod 通信并 使用完全獨立的信任鏈的證書不同。

默認情況下,當 Linkerd 與 Linkerd CLI 或 Linkerd Helm chart 一起安裝時, 會自動為所有 webhook 生成 TLS 憑據(jù)。如果這些證書過期或因任何原因需要重新生成, 執(zhí)行 Linkerd upgrade(使用 Linkerd CLI 或使用 Helm)將重新生成它們。

此工作流程適用于大多數(shù)用戶。但是,如果您需要定期自動輪換這些 webhook 證書, 則可以使用 cert-manager 來自動管理它們。

安裝 Cert manager

第一步,在 您的集群上安裝 cert-manager 并創(chuàng)建 cert-manager 將用于存儲其 webhook 相關資源的命名空間。為簡單起見,我們建議使用默認命名空間 linkerd 使用:

  1. # control plane core 
  2. kubectl create namespace linkerd 
  3.  
  4. # viz (ignore if not using the viz extension) 
  5. kubectl create namespace linkerd-viz 
  6.  
  7. # viz (ignore if not using the jaeger extension) 
  8. kubectl create namespace linkerd-jaeger 

將簽名密鑰對(signing key pair)保存為 Secret

接下來,我們將使用 step 工具創(chuàng)建一個簽名密鑰對(signing key pair),用于對每個 webhook 證書進行簽名:

  1. step certificate create webhook.linkerd.cluster.local ca.crt ca.key \ 
  2.   --profile root-ca --no-password --insecure --san webhook.linkerd.cluster.local 
  3.  
  4. kubectl create secret tls webhook-issuer-tls --cert=ca.crt --key=ca.key --namespace=linkerd 
  5.  
  6. ignore if not using the viz extension 
  7. kubectl create secret tls webhook-issuer-tls --cert=ca.crt --key=ca.key --namespace=linkerd-viz 
  8.  
  9. ignore if not using the jaeger extension 
  10. kubectl create secret tls webhook-issuer-tls --cert=ca.crt --key=ca.key --namespace=linkerd-jaeger 

創(chuàng)建引用 secrets 的發(fā)行者(Issuers)

有了 Secrets,我們就可以創(chuàng)建引用它們的 cert-manager "Issuer" 資源:

  1. cat <<EOF | kubectl apply -f - 
  2. apiVersion: cert-manager.io/v1 
  3. kind: Issuer 
  4. metadata: 
  5.   name: webhook-issuer 
  6.   namespace: linkerd 
  7. spec: 
  8.   ca: 
  9.     secretName: webhook-issuer-tls 
  10. --- 
  11. ignore if not using the viz extension 
  12. apiVersion: cert-manager.io/v1 
  13. kind: Issuer 
  14. metadata: 
  15.   name: webhook-issuer 
  16.   namespace: linkerd-viz 
  17. spec: 
  18.   ca: 
  19.     secretName: webhook-issuer-tls 
  20. --- 
  21. ignore if not using the jaeger extension 
  22. apiVersion: cert-manager.io/v1 
  23. kind: Issuer 
  24. metadata: 
  25.   name: webhook-issuer 
  26.   namespace: linkerd-jaeger 
  27. spec: 
  28.   ca: 
  29.     secretName: webhook-issuer-tls 
  30. EOF 

頒發(fā)證書并將其寫入 secrets

最后,我們可以創(chuàng)建 cert-manager "Certificate" 資源, 它使用頒發(fā)者(Issuers)來生成所需的證書:

  1. cat <<EOF | kubectl apply -f - 
  2. apiVersion: cert-manager.io/v1 
  3. kind: Certificate 
  4. metadata: 
  5.   name: linkerd-proxy-injector 
  6.   namespace: linkerd 
  7. spec: 
  8.   secretName: linkerd-proxy-injector-k8s-tls 
  9.   duration: 24h 
  10.   renewBefore: 1h 
  11.   issuerRef: 
  12.     name: webhook-issuer 
  13.     kind: Issuer 
  14.   commonName: linkerd-proxy-injector.linkerd.svc 
  15.   dnsNames: 
  16.   - linkerd-proxy-injector.linkerd.svc 
  17.   isCA: false 
  18.   privateKey: 
  19.     algorithm: ECDSA 
  20.   usages: 
  21.   - server auth 
  22. --- 
  23. apiVersion: cert-manager.io/v1 
  24. kind: Certificate 
  25. metadata: 
  26.   name: linkerd-sp-validator 
  27.   namespace: linkerd 
  28. spec: 
  29.   secretName: linkerd-sp-validator-k8s-tls 
  30.   duration: 24h 
  31.   renewBefore: 1h 
  32.   issuerRef: 
  33.     name: webhook-issuer 
  34.     kind: Issuer 
  35.   commonName: linkerd-sp-validator.linkerd.svc 
  36.   dnsNames: 
  37.   - linkerd-sp-validator.linkerd.svc 
  38.   isCA: false 
  39.   privateKey: 
  40.     algorithm: ECDSA 
  41.   usages: 
  42.   - server auth 
  43. --- 
  44. ignore if not using the viz extension 
  45. apiVersion: cert-manager.io/v1 
  46. kind: Certificate 
  47. metadata: 
  48.   name: tap 
  49.   namespace: linkerd-viz 
  50. spec: 
  51.   secretName: tap-k8s-tls 
  52.   duration: 24h 
  53.   renewBefore: 1h 
  54.   issuerRef: 
  55.     name: webhook-issuer 
  56.     kind: Issuer 
  57.   commonName: tap.linkerd-viz.svc 
  58.   dnsNames: 
  59.   - tap.linkerd-viz.svc 
  60.   isCA: false 
  61.   privateKey: 
  62.     algorithm: ECDSA 
  63.   usages: 
  64.   - server auth 
  65. --- 
  66. ignore if not using the viz extension 
  67. apiVersion: cert-manager.io/v1 
  68. kind: Certificate 
  69. metadata: 
  70.   name: linkerd-tap-injector 
  71.   namespace: linkerd-viz 
  72. spec: 
  73.   secretName: tap-injector-k8s-tls 
  74.   duration: 24h 
  75.   renewBefore: 1h 
  76.   issuerRef: 
  77.     name: webhook-issuer 
  78.     kind: Issuer 
  79.   commonName: tap-injector.linkerd-viz.svc 
  80.   dnsNames: 
  81.   - tap-injector.linkerd-viz.svc 
  82.   isCA: false 
  83.   privateKey: 
  84.     algorithm: ECDSA 
  85.   usages: 
  86.   - server auth 
  87. --- 
  88. ignore if not using the jaeger extension 
  89. apiVersion: cert-manager.io/v1 
  90. kind: Certificate 
  91. metadata: 
  92.   name: jaeger-injector 
  93.   namespace: linkerd-jaeger 
  94. spec: 
  95.   secretName: jaeger-injector-k8s-tls 
  96.   duration: 24h 
  97.   renewBefore: 1h 
  98.   issuerRef: 
  99.     name: webhook-issuer 
  100.     kind: Issuer 
  101.   commonName: jaeger-injector.linkerd.svc 
  102.   dnsNames: 
  103.   - jaeger-injector.linkerd.svc 
  104.   isCA: false 
  105.   privateKey: 
  106.     algorithm: ECDSA 
  107.   usages: 
  108.   - server auth 
  109. EOF 

此時 cert-manager 現(xiàn)在可以使用這些 Certificate resources 來獲取 TLS 憑證, 這些憑證分別存儲在 linkerd-proxy-injector-k8s-tls、linkerd-sp-validator-k8s-tls、tap- k8s-tls、tap-injector-k8s-tls 和 jaeger-injector-k8s-tls 這些 secrets 中。

現(xiàn)在我們只需要通知 Linkerd 使用這些憑據(jù)。

在 CLI 安裝中使用這些憑據(jù)

要將 Linkerd 配置為使用來自 cert-manager 的憑據(jù)而不是生成自己的憑據(jù), 我們生成了一個補充配置文件:

CA=$(awk '{ print " " $0 }' ca.crt)cat > config.yml <

現(xiàn)在我們可以使用這些配置文件安裝 Linkerd:

  1. CA=$(awk '{ print "    " $0 }' ca.crt) 
  2.  
  3. cat > config.yml <<EOF 
  4. proxyInjector: 
  5.   externalSecret: true 
  6.   caBundle: | 
  7. $CA 
  8. profileValidator: 
  9.   externalSecret: true 
  10.   caBundle: | 
  11. $CA 
  12. EOF 
  13.  
  14. ignore if not using the viz extension 
  15. cat > config-viz.yml <<EOF 
  16. tap: 
  17.   externalSecret: true 
  18.   caBundle: | 
  19. $CA 
  20. tapInjector: 
  21.   externalSecret: true 
  22.   caBundle: | 
  23. $CA 
  24. EOF 
  25.  
  26. ignore if not using the jaeger extension 
  27. cat > config-jaeger.yml <<EOF 
  28. webhook: 
  29.   externalSecret: true 
  30.   caBundle: | 
  31. $CA 
  32. EOF 

現(xiàn)在我們可以使用這些配置文件安裝 Linkerd:

  1. linkerd install --values=config.yml | kubectl apply -f - 
  2.  
  3. ignore if not using the viz extension 
  4. linkerd viz install --values=config-viz.yml | kubectl apply -f - 
  5.  
  6. ignore if not using the jaeger extension 
  7. linkerd jaeger install --values=config-jaeger.yml | kubectl apply -f - 

使用 Helm 安裝

對于 Helm 安裝,我們可以直接配置 Helm 值:

  1. helm install linkerd2 \ 
  2.   --set installNamespace=false \ 
  3.   --set proxyInjector.externalSecret=true \ 
  4.   --set-file proxyInjector.caBundle=ca.crt \ 
  5.   --set profileValidator.externalSecret=true \ 
  6.   --set-file profileValidator.caBundle=ca.crt \ 
  7.   linkerd/linkerd2 \ 
  8.   -n linkerd 
  9.  
  10. ignore if not using the viz extension 
  11. helm install linkerd-viz \ 
  12.   --set installNamespace=false \ 
  13.   --set tap.externalSecret=true \ 
  14.   --set-file tap.caBundle=ca.crt \ 
  15.   --set tapInjector.externalSecret=true \ 
  16.   --set-file tapInjector.caBundle=ca.crt \ 
  17.   linkerd/linkerd-viz \ 
  18.   -n linkerd-viz 
  19.  
  20. ignore if not using the jaeger extension 
  21. helm install linkerd-jaeger \ 
  22.   --set installNamespace=false \ 
  23.   --set webhook.externalSecret=true \ 
  24.   --set-file webhook.caBundle=ca.crt \ 
  25.   linkerd/linkerd-jaeger \ 
  26.   -n linkerd-jaeger 

使用 Helm 安裝 Linkerd 時, 您還必須提供頒發(fā)者信任根(issuer trust root)和頒發(fā)者憑據(jù)(issuer credentials), 如使用 Helm 安裝 Linkerd 中所述。

對于低于 v3 的 Helm 版本,必須專門傳遞 --name 標志。在 Helm v3 中,它已被棄用,并且是上面指定的第一個參數(shù)。

 

責任編輯:姜華 來源: 黑客下午茶
相關推薦

2021-06-22 06:24:57

Linkerd Ingress 流量網絡技術

2021-06-16 17:42:48

Linkerd 配置CPU

2021-06-22 06:41:38

Linkerd 安裝多集群組件網絡技術

2021-06-22 06:16:24

Linkerd books webapp

2021-06-17 06:20:43

Linkerd Kustomize網絡技術

2021-06-17 14:29:39

Linkerd 分布式跟蹤Linkerd 2.1

2021-06-17 06:13:29

Linkerd Prometheus 網絡技術

2021-06-15 05:45:56

Linkerd annotations網絡技術

2021-06-15 05:52:33

Linkerd canary網絡技術

2021-06-24 07:20:21

Linked GitOps Argo CD

2010-09-08 09:41:03

私有云部署

2011-04-19 14:02:09

SSAS

2009-04-22 17:18:29

Vxworks驅動加載step by ste

2021-06-29 13:09:07

服務配置文件

2021-03-25 14:41:05

TLS1.0IETF瀏覽器

2011-03-08 14:14:31

Proftpd

2024-01-25 11:38:11

AI數(shù)據(jù)

2016-10-31 10:25:24

2020-08-04 10:10:12

DNS over TL系統(tǒng)運維

2020-03-24 08:00:00

Linux日志文件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久免费看 | 中文字幕一区在线观看视频 | 中文字幕国产视频 | 曰批视频在线观看 | 国内精品久久久久 | 成人伊人| 色欧美综合 | 91精品国产自产精品男人的天堂 | 精品国产一区二区久久 | 人成在线| 国产免费观看久久黄av片涩av | 精品欧美一区二区在线观看 | 欧美日韩中 | 久久国产亚洲 | 免费特黄视频 | 免费在线视频精品 | av网站在线免费观看 | 国产成人精品一区二区三区在线观看 | 亚洲欧美一区二区三区视频 | 91玖玖| 国产精品视频在线播放 | 国产探花 | 天天干成人网 | 成年人在线视频 | 偷拍自拍第一页 | 成人一区二区三区 | 天天色综| 羞羞的视频网站 | 视频一区二区中文字幕日韩 | 国产在线一区二区 | 在线观看视频一区 | 国产精品区一区二区三区 | 亚洲精选一区 | 99色综合 | 日韩av一区二区在线观看 | 99久久婷婷国产综合精品电影 | 免费国产视频 | 欧美偷偷 | 国产日韩欧美在线一区 | 久久精品一区二区三区四区 | 日韩精品在线一区 |