Web Analytics
Back
Featured image of post 如何在為您的 Kubernetes Service 使用 TLS/SSL

如何在為您的 Kubernetes Service 使用 TLS/SSL

簡單說明如何在 Kubernetes 環境下,幫您的網站掛上 HTTPS (在 AKS 環境以 ingress-nginx 為範例)

 

前言

因為工作的關係,每天必須接觸 Kubernetes 服務,就萌生了將目前的 side project 搬上 Kubernetes 的想法。一來可以有環境可實作與測試,二來也可以減少一些成本,一舉兩得。本篇文章即是搬移過程中的紀錄,除了提供自己後續搬移時參考,也提供有興趣的朋友參考。本篇文章若有錯誤或任何建議,請各位先進不吝提出。

 
 
 

說明

整個操作步驟大概如下:

  1. 安裝 ingress-nginx (透過 Helm Chart)
  2. 準備憑證相關檔案
  3. 建立 Secret (可以透過 kubectl create secret 指令產生)
  4. 建立 Ingress

中間過程中若發生憑證安全性問題,檢視憑證為 Kubernetes Ingress Controller Fake Certificate,則表示在設定上有問題,請檢視是否有輸入錯誤名稱情況。

 

雖然我是使用 Azure Kubernetes Services,但會透過 ngiex 作為 ingress 而不是使用 Azure app gateway,而考量的原因在於通用性,若有需要搬移至不同雲端環境,仍可以透過相同的步驟方式進行。若您是企業用戶或所有服務皆在 Azure 上,您可以考慮使用 app gateway 作為 ingress,以提供更完善服務與防護。

 
 
 

建立步驟

安裝 ingerss-nginx 指令。下列指令包含加入 Helm Chart Repo、更新與安裝 ingerss-nginx。

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx \
  --create-namespace \
  --namespace $NAMESPACE \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz

 

安裝完成後,我們可以透過下列指令取得服務,檢視 ingress 狀態。

kubectl get services

 

若你要直接使用 YAML 方式產生 tls secret 會很辛苦 (幾個內容值需要轉換格式)。您可以透過下列指令與既有的憑證檔案 (.pem 與 key),直接建立 Secret。

kubectl create secret tls webtools-tls-secret --key webtool.key --cert webtools.pem

 

若你想要想要建立的同時也輸出成 yaml 檔案,可以透過下列指令 (增加參數 -o yaml)

kubectl create secret tls webtools-tls-secret --key=webtool.key --cert=webtools.pem -o yaml

 

透過下列指令,查詢 Secret 是否建立成功。

 

最後建立/更新 Ingress 檔案,參考如下。主要在於 tls 內容中的 hosts 與 secretName 是否正確,還有 rules 內的 hosts 是否正確。

piVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: webapp
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - online-toolset.com
    secretName: webtools-tls-secret  
  rules:
  - host: online-toolset.com
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: webapp
            port: 
              number: 80

 

最後,kubectl apply 您的 ingress yaml 檔案即可。我的範例是將三者寫在同一個 deploy-webapp.yaml 檔案內,一次更新。

kubectl apply -f deploy-webapp.yml 

 

開啟瀏覽器,輸入網址,即可看見您的網站有 HTTPS 保護

Built with Hugo   Theme Stack designed by Jimmy