<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 管理集群中的TLS 在本書的最佳實踐部分,我們在CentOS上部署了kuberentes集群,其中最開始又重要的一步就是創建TLS認證的,查看[創建TLS證書和秘鑰](../practice/create-tls-and-secret-key.md)。很多人在進行到這一步時都會遇到各種各樣千奇百怪的問題,這一步是創建集群的基礎,我們有必要詳細了解一下其背后的流程和原理。 ## 概覽 每個Kubernetes集群都有一個集群根證書頒發機構(CA)。 集群中的組件通常使用CA來驗證API server的證書,由API服務器驗證kubelet客戶端證書等。為了支持這一點,CA證書包被分發到集群中的每個節點,并作為一個secret附加分發到默認service account上。 或者,你的workload可以使用此CA建立信任。 你的應用程序可以使用類似于[ACME草案](https://github.com/ietf-wg-acme/acme/)的協議,使用`certificates.k8s.io` API請求證書簽名。 ## 集群中的TLS信任 讓Pod中運行的應用程序信任集群根CA通常需要一些額外的應用程序配置。 您將需要將CA證書包添加到TLS客戶端或服務器信任的CA證書列表中。 例如,您可以使用golang TLS配置通過解析證書鏈并將解析的證書添加到[`tls.Config`](https://godoc.org/crypto/tls#Config)結構中的`Certificates`字段中,CA證書捆綁包將使用默認服務賬戶自動加載到pod中,路徑為`/var/run/secrets/kubernetes.io/serviceaccount/ca.crt`。 如果您沒有使用默認服務賬戶,請請求集群管理員構建包含您有權訪問使用的證書包的configmap。 ## 請求認證 以下部分演示如何為通過DNS訪問的Kubernetes服務創建TLS證書。 ### 步驟0. 下載安裝SSL 下載cfssl工具:[https://pkg.cfssl.org/](https://pkg.cfssl.org/). ### 步驟1. 創建證書簽名請求 通過運行以下命令生成私鑰和證書簽名請求(或CSR): ```Bash $ cat <<EOF | cfssl genkey - | cfssljson -bare server { "hosts": [ "my-svc.my-namespace.svc.cluster.local", "my-pod.my-namespace.pod.cluster.local", "172.168.0.24", "10.0.34.2" ], "CN": "my-pod.my-namespace.pod.cluster.local", "key": { "algo": "ecdsa", "size": 256 } } EOF ``` `172.168.0.24` 是 service 的 cluster IP,`my-svc.my-namespace.svc.cluster.local` 是 service 的 DNS 名稱, `10.0.34.2` 是 Pod 的 IP, `my-pod.my-namespace.pod.cluster.local` 是pod 的 DNS 名稱,你可以看到以下輸出: ```ini 2017/03/21 06:48:17 [INFO] generate received request 2017/03/21 06:48:17 [INFO] received CSR 2017/03/21 06:48:17 [INFO] generating key: ecdsa-256 2017/03/21 06:48:17 [INFO] encoded CSR ``` 此命令生成兩個文件; 它生成包含PEM編碼的[pkcs #10](https://tools.ietf.org/html/rfc2986)認證請求的`server.csr`,以及包含仍然要創建的證書的PEM編碼密鑰的`server-key.pem`。 ### 步驟2. 創建證書簽名請求對象以發送到Kubernetes API 使用以下命令創建CSR yaml文件,并發送到API server: ```bash $ cat <<EOF | kubectl create -f - apiVersion: certificates.k8s.io/v1beta1 kind: CertificateSigningRequest metadata: name: my-svc.my-namespace spec: groups: - system:authenticated request: $(cat server.csr | base64 | tr -d '\n') usages: - digital signature - key encipherment - server auth EOF ``` 請注意,在步驟1中創建的`server.csr`文件是base64編碼并存儲在`.spec.request`字段中。 我們還要求提供“數字簽名”,“密鑰加密”和“服務器身份驗證”密鑰用途的證書。 在API server中可以看到這些CSR處于pending狀態。執行下面的命令你將可以看到: ```bash $ kubectl describe csr my-svc.my-namespace Name: my-svc.my-namespace Labels: <none> Annotations: <none> CreationTimestamp: Tue, 21 Mar 2017 07:03:51 -0700 Requesting User: yourname@example.com Status: Pending Subject: Common Name: my-svc.my-namespace.svc.cluster.local Serial Number: Subject Alternative Names: DNS Names: my-svc.my-namespace.svc.cluster.local IP Addresses: 172.168.0.24 10.0.34.2 Events: <none> ``` ### 步驟3. 獲取證書簽名請求 批準證書簽名請求是通過自動批準過程完成的,或由集群管理員一次完成。 有關這方面涉及的更多信息,請參見下文。 ### 步驟4. 下載簽名并使用 一旦CSR被簽署并獲得批準,您應該看到以下內容: ```bash $ kubectl get csr NAME AGE REQUESTOR CONDITION my-svc.my-namespace 10m yourname@example.com Approved,Issued ``` 你可以通過運行以下命令下載頒發的證書并將其保存到`server.crt`文件中: ```bash $ kubectl get csr my-svc.my-namespace -o jsonpath='{.status.certificate}' \ | base64 -d > server.crt ``` 現在你可以用`server.crt`和`server-key.pem`來做為keypair來啟動HTTPS server。 ## 批準證書簽名請求 Kubernetes 管理員(具有適當權限)可以使用 `kubectl certificate approve` 和`kubectl certificate deny` 命令手動批準(或拒絕)證書簽名請求。但是,如果您打算大量使用此 API,則可以考慮編寫自動化的證書控制器。 如果上述機器或人類使用 kubectl,批準者的作用是驗證 CSR 滿足如下兩個要求: 1. CSR 的主體控制用于簽署 CSR 的私鑰。這解決了偽裝成授權主體的第三方的威脅。在上述示例中,此步驟將驗證該 pod 控制了用于生成 CSR 的私鑰。 2. CSR 的主體被授權在請求的上下文中執行。這解決了我們加入群集的我們不期望的主體的威脅。在上述示例中,此步驟將是驗證該 pod 是否被允許加入到所請求的服務中。 當且僅當滿足這兩個要求時,審批者應該批準 CSR,否則拒絕 CSR。 ## 給集群管理員的一個建議 本教程假設將signer設置為服務證書API。Kubernetes controller manager提供了一個signer的默認實現。 要啟用它,請將`--cluster-signing-cert-file`和`--cluster-signing-key-file`參數傳遞給controller manager,并配置具有證書頒發機構的密鑰對的路徑。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看