cert-manager是一個認證生命週期管理系統,支援認證的申請、部署等功能。您可以使用cert-manager頒發ASM網關的認證,從而可以使用HTTPS協議通過ASM網關訪問服務,保證資料轉送的安全。本文介紹如何使用cert-manager管理網關的認證。
背景資訊
cert-manager支援簽發自我簽署憑證和DNS網域名稱認證,從而可以使用HTTPS協議通過ASM網關訪問服務。這兩種認證的區別如下:
自我簽署憑證:自我簽署憑證僅具有加密功能,無身分識別驗證功能。您可以在命令列工具中使用HTTPS協議訪問ASM網關,但是自我簽署憑證不受Web瀏覽器的信任,Web瀏覽器檢查HTTPS串連會標記為潛在風險並彈出錯誤訊息,即無法在Web瀏覽器中使用HTTPS協議通過ASM網關訪問服務。
DNS網域名稱認證:DNS網域名稱認證由受信任的CA機構頒發,兼具加密和身分識別驗證功能。相比自我簽署憑證,DNS網域名稱認證具有更高的安全性,受到Web瀏覽器的信任。您可以同時在命令列工具和Web瀏覽器中使用HTTPS協議通過ASM網關訪問服務。
若您在ASM資料面叢集中使用cert-manager時報錯,可以加入釘群(釘群號:30421250)進行諮詢。
前提條件
在叢集中安裝cert-manager
在本地安裝Helm。具體操作,請參見Helm。
使用kubectl串連叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,建立cert-manager命名空間。
kubectl create namespace cert-manager
執行以下命令,添加cert-manager Chart。
helm repo add jetstack https://charts.jetstack.io
執行以下命令,擷取cert-manager Chart的最新資訊。
helm repo update
執行以下命令,安裝cert-manager。
說明cert-manager的版本需要和Kubernetes版本保持相容。關於cert-manager和Kubernetes版本的對應關係,請參見Supported Releases。
helm install \ cert-manager jetstack/cert-manager \ --namespace cert-manager \ --version v1.14 \ --set installCRDs=true
使用cert-manager簽發自我簽署憑證
步驟一:在叢集中產生自簽認證
使用以下內容,建立issuer.yaml。
執行以下命令,建立自簽名CA來頒發工作負載認證。
kubectl apply -f issuer.yaml -n istio-system
執行以下命令,查看認證。
kubectl get secret -n istio-system
預期輸出:
NAME TYPE DATA AGE istio-ingressgateway-certs kubernetes.io/tls 3 68m
步驟二:驗證使用HTTPS協議訪問服務是否成功
部署httpbin應用。具體操作,請參見部署httpbin應用。
修改httpbin應用對應的網關規則。
您可以使用ASM的KubeConfig在命令列進行操作,或者登入ASM控制台,在網關規則頁面修改YAML。具體操作,請參見管理網關規則。
修改後的YAML樣本如下。在443連接埠增加了HTTPS協議的監聽,並且使用了cert-manager建立的認證。
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: httpbin namespace: default spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: test number: 80 protocol: HTTP - hosts: - '*' port: name: https number: 443 protocol: HTTPS tls: credentialName: istio-ingressgateway-certs mode: SIMPLE
執行以下命令,在叢集中擷取入口網關的IP地址。
kubectl get svc -n istio-system -l istio=ingressgateway
執行以下命令,通過HTTPS協議訪問httpbin應用。
curl -k --resolve istio-ingressgateway-certs:443:${ASM網關IP} https://istio-ingressgateway-certs/status/418 -I
訪問成功後,您可以看到返回了418狀態代碼。此處訪問ASM網關使用的網域名稱是
istio-ingressgateway-certs
,這是因為之前建立Certificate時,使用的commonName
為istio-ingressgateway-certs
。