本頁面說明如何在 GKE 上使用 Google 代管的 SSL 憑證,確保 Ingress 安全無虞。您將瞭解如何使用 Google 的自動化憑證管理服務,簡化應用程式的 HTTPS 加密程序。
這些憑證均為網域驗證 (DV) 憑證,且 Google 會針對您的網域名稱佈建、更新及管理這些憑證。這類憑證無法證明您的個人或機構身分。
本頁內容適用於規劃及實作網路安全防護機制,以及開發和維護安全政策的網路和安全專家。如要進一步瞭解我們在Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。
閱讀本頁內容前,請先確認您已具備 GKE 實務知識,並充分瞭解網路和網路安全。
如要瞭解如何使用 Google Cloud建立 Google 代管憑證,請參閱「Google 代管憑證」。
建立具有 Google 代管憑證的 Ingress
如要設定 Google 代管的 SSL 憑證並將其與 Ingress 建立關聯,您需要:
- 在與 Ingress 相同的命名空間中建立
ManagedCertificate物件。 - 將
networking.gke.io/managed-certificates註解新增至 Ingress,以便讓ManagedCertificate物件與 Ingress 建立關聯。這個註解是以半形逗號分隔的ManagedCertificate物件清單。
限制
與您取得且自行管理的憑證相較,Google 代管憑證較不具彈性。Google 代管憑證最多支援 100 個非萬用字元網域。與自行管理的憑證不同,Google 代管憑證不支援萬用字元網域。
如果您必須使用自行管理憑證,或已具備要在 Ingress 上設定的 SSL 憑證,請參閱「在用戶端和負載平衡器之間設定 HTTPS (TLS)」。
Ingress 支援的憑證數量和類型是由 Google 代管的 SSL 憑證限制所定義。
系統不支援更新 Google 代管憑證。詳情請參閱「手動更新 Google 代管的憑證」。
如果憑證是直接向憑證授權單位撤銷,Google 不會自動輪替憑證。您必須刪除 ManagedCertificate,然後建立新的憑證。
必要條件
您必須擁有網域名稱,網域名稱的長度不得超過 63 個字元。您可以向任何網域名稱註冊商購買網域名稱。
如果您使用 GKE Standard 叢集,則必須啟用
HttpLoadBalancing外掛程式。Ingress 資訊清單必須包含
kubernetes.io/ingress.class: "gce"註解。系統不支援「ingressClassName」欄位。您必須在相同專案和命名空間中套用
Ingress和ManagedCertificate資源。建立保留 (靜態) 外部 IP 位址。即使您刪除 Ingress,保留靜態 IP 位址可確保您持續擁有該位址。如果您沒有保留 IP 位址,位址可能會有所異動,導致您必須重新設定網域的 DNS 記錄。使用 Google Cloud CLI 或 Google Cloud 控制台建立保留 IP 位址。
gcloud
如要建立保留的 IP 位址,請執行下列指令:
gcloud compute addresses create ADDRESS_NAME --global將
ADDRESS_NAME替換為您要建立的預留 IP 位址名稱。如要找出您建立的靜態 IP 位址,請執行下列指令:
gcloud compute addresses describe ADDRESS_NAME --global輸出結果會與下列內容相似:
address: 203.0.113.32 ...控制台
如要建立保留 IP 位址,請執行下列步驟:
前往 Google Cloud 控制台的「External IP addresses」(外部 IP 位址) 頁面。
為 IP 位址指定名稱 (例如
example-ip-address)。指定要使用 IPv4 或 IPv6 位址。
在「Type」(類型) 欄位選取「Global」(全域) 選項。
按一下「預留」。 IP 位址會列在「External Address」(外部位址) 欄位中。
設定連接器
附註:此步驟需要使用設定連接器。請按照安裝操作說明在叢集上安裝設定連接器。
如要部署此資訊清單,請以compute-address.yaml格式將其下載至您的電腦,並執行下列指令:kubectl apply -f compute-address.yaml
設定 Google 代管憑證
建立
ManagedCertificate物件。該資源可以指定 SSL 憑證的網域。系統不支援萬用字元網域。下列資訊清單說明
ManagedCertificate物件。將資訊清單儲存為managed-cert.yaml。apiVersion: networking.gke.io/v1 kind: ManagedCertificate metadata: name: managed-cert spec: domains: - FQDN_1 - FQDN_2更改下列內容:
FQDN_1、FQDN_2: 您擁有的完整網域名稱。例如example.com和www.example.com。
將資訊清單套用至叢集:
kubectl apply -f managed-cert.yaml建立
NodePort類型的 Service,將應用程式公開發布到網際網路。下列資訊清單說明
NodePort類型的 Service。將資訊清單儲存為mc-service.yaml。apiVersion: v1 kind: Service metadata: name: mc-service spec: selector: app: mc-service type: NodePort ports: - protocol: TCP port: 80 targetPort: 8080將資訊清單套用至叢集:
kubectl apply -f mc-service.yamlManagedCertificate建立 Ingress。
下列資訊清單說明使用您建立的
ManagedCertificate的 Ingress。將資訊清單儲存為managed-cert-ingress.yaml。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: managed-cert-ingress annotations: kubernetes.io/ingress.global-static-ip-name: ADDRESS_NAME networking.gke.io/managed-certificates: managed-cert kubernetes.io/ingress.class: "gce" spec: defaultBackend: service: name: mc-service port: number: SERVICE_PORT更改下列內容:
ADDRESS_NAME:預留 IP 位址的名稱。SERVICE_PORT:服務資訊清單中的ports.port值。
將資訊清單套用至叢集:
kubectl apply -f managed-cert-ingress.yaml取得負載平衡器的 IP 位址:
kubectl get ingress輸出結果會與下列內容相似:
NAME HOSTS ADDRESS PORTS AGE managed-cert-ingress * 203.0.113.32 80 54s負載平衡器 IP 位址會列在
ADDRESS欄位中。如果您正在使用保留靜態 IP 位址,則該位址會做為負載平衡器位址。如果系統未列出位址,請等候 Ingress 完成設定。
將網域的 DNS 記錄設定為指向負載平衡器的 IP 位址。如果您使用 Cloud DNS,請參閱「管理記錄」一文瞭解詳情。
等待 Google 代管憑證完成佈建。這項作業最多可能需要 60 分鐘。您可以使用下列指令檢查憑證狀態:
kubectl describe managedcertificate managed-cert輸出結果會與下列內容相似:
Name: managed-cert Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: ManagedCertificate (...) Spec: Domains: FQDN_1 FQDN_2 Status: CertificateStatus: Active (...)Status.CertificateStatus欄位的值表示已佈建憑證。如果Status.CertificateStatus不是Active,表示憑證尚未佈建。您可以使用下列指令檢查 Ingress 上的事件:
kubectl describe ingress INGRESS_NAME將
INGRESS_NAME換成 Ingress 的名稱。使用
https://前置字串造訪您的網域,驗證 SSL 是否運作正常。此時瀏覽器會顯示連線是否安全,並供您查看憑證的詳細資料。
從自行管理憑證遷移至 Google 代管憑證
如果要將 Ingress 從使用自行管理的 SSL 憑證遷移至使用 Google 代管的 SSL 憑證,請勿在 Google 代管的 SSL 憑證啟用前,刪除任何自行管理的 SSL 憑證。Google 代管 SSL 憑證佈建完畢後,便會自動啟用。Google 代管 SSL 憑證啟用後,您就可以刪除自行管理 SSL 憑證。
請按照以下操作說明,從自行管理 SSL 憑證遷移至 Google 代管 SSL 憑證。
- 如「設定 Google 代管憑證」一節所述,將新的 Google 代管憑證新增至 Ingress。
等待 Google 代管憑證資源狀態顯示為「Active」(啟用)。使用下列指令檢查憑證狀態:
kubectl describe managedcertificate managed-cert狀態顯示為
Active時,請更新 Ingress,以移除對自行管理憑證的參照。
移除 Google 代管憑證
如要移除叢集中的 Google 代管憑證,您必須刪除 ManagedCertificate 物件,並移除參照該物件的 Ingress 註解。
刪除
ManagedCertificate物件:kubectl delete -f managed-cert.yaml輸出結果會與下列內容相似:
managedcertificate.networking.gke.io "managed-cert" deleted移除 Ingress 中的註解:
kubectl annotate ingress managed-cert-ingress networking.gke.io/managed-certificates-注意指令結尾的減號「-」。
-釋出您為負載平衡器保留的靜態 IP 位址。
您可以使用 Google Cloud CLI、 Google Cloud 控制台或 Config Connector,釋出保留的 IP 位址。
gcloud
使用下列指令釋出保留的 IP 位址:
gcloud compute addresses delete ADDRESS_NAME --global將
ADDRESS_NAME替換為 IP 位址名稱。控制台
如要釋出保留的 IP 位址,請按照下列步驟操作:
前往 Google Cloud 控制台的「External IP addresses」(外部 IP 位址) 頁面。
找出要釋放的 IP 位址,然後選取旁邊的核取方塊。
按一下 [Release IP address] (釋出 IP 位址)。
設定連接器
附註:此步驟需要使用設定連接器。請按照安裝操作說明在叢集上安裝設定連接器。
如要部署此資訊清單,請以
compute-address.yaml格式將其下載至您的電腦,並執行下列指令:kubectl delete -f compute-address.yaml
後續步驟
- 進一步瞭解 Google 代管憑證。
- 瞭解如何使用 Ingress 設定外部應用程式負載平衡器。
- 瞭解如何透過 Ingress 在外部應用程式負載平衡器中使用多個 SSL 憑證。
- 實作安全 Ingress。