透過 Ingress 設定後端服務

本頁面說明如何使用 Kubernetes Ingress 物件來設定 Google Cloud Platform 後端服務的特定屬性。

總覽

在 GKE 叢集中建立 Kubernetes Ingress 物件時,系統會喚醒 GKE Ingress 控制器並建立 Google Cloud Platform HTTP(S) 負載平衡器。 此 Ingress 控制器會設定負載平衡器,同時設定一或多個與負載平衡器關聯的後端服務

從 GKE 1.11.3-gke.18 版開始,您可以使用 Ingress 來設定後端服務的這些屬性。

後端服務的配置資訊是保存在名為 BackendConfig 的自訂資源。

若要設定後端服務的屬性:

  1. 建立 BackendConfig。
  2. 建立 Service,將 Service 的其中一個通訊埠與 BackendConfig 建立關聯。
  3. 建立 Ingress,將 Ingress 與 (Service、通訊埠) 組合建立關聯。

事前準備

如要準備這項工作,請執行下列步驟:

  • 確認您已啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 確認您已安裝 Cloud SDK
  • 設定預設的專案 ID
    gcloud config set project [PROJECT_ID]
  • 如果您使用區域叢集,請設定預設的運算區域
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 如果您使用地區叢集,請設定預設的運算地區
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud 更新到最新版本:
    gcloud components update

建立部署

建立 BackendConfig 和 Service 之前,您必須先建立部署。以下是部署的資訊清單:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-bsc-deployment
spec:
  selector:
    matchLabels:
      purpose: bsc-config-demo
  replicas: 2
  template:
    metadata:
      labels:
        purpose: bsc-config-demo
    spec:
      containers:
      - name: hello-app-container
        image: gcr.io/google-samples/hello-app:1.0

將資訊清單複製到名為 my-bsc-deployment.yaml 的檔案,然後建立部署:

kubectl apply -f my-bsc-deployment.yaml

建立 BackendConfig

以下是 BackendConfig 的資訊清單。資訊清單會指定:

  • 逾時為 40 秒。
  • 連線排除逾時為 60 秒。
apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: my-bsc-backendconfig
spec:
  timeoutSec: 40
  connectionDraining:
    drainingTimeoutSec: 60

將資訊清單複製到名為 my-bsc-backendconfig.yaml 的檔案,然後建立 BackendConfig:

kubectl apply -f my-bsc-backendconfig.yaml

建立服務

以下是 Service 的資訊清單:

apiVersion: v1
kind: Service
metadata:
  name: my-bsc-service
  labels:
    purpose: bsc-config-demo
  annotations:
    beta.cloud.google.com/backend-config: '{"ports": {"80":"my-bsc-backendconfig"}}'
spec:
  type: NodePort
  selector:
    purpose: bsc-config-demo
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080

針對本練習的目的,以下是 Service 需要注意的重要事項:

  • 具有標籤 purpose: bsc-config-demo 的任何 Pod 都是 Service 的成員。

  • Service 的 TCP 通訊埠 80 會與名為 my-bsc-backendconfig 的 BackendConfig 相關聯。這個是由 beta.cloud.google.com/backend-config 註解所指定。

  • 當要求傳入在通訊埠 80 上的 Service 時,會轉送至在 TCP 通訊埠 8080 上的其中一個成員 pod。

將資訊清單複製到名為 my-bsc-service.yaml 的檔案,然後建立 Service:

kubectl apply -f my-bsc-service.yaml

建立 Ingress

以下是 Ingress 的資訊清單:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-bsc-ingress
spec:
  rules:
  - http:
      paths:
      - path: /*
        backend:
          serviceName: my-bsc-service
          servicePort: 80

在資訊清單中,您可以看到傳入要求轉送至名為 my-bsc-service 的 Service 通訊埠 80。

將資訊清單複製到名為 my-bsc-ingress.yaml 的檔案,然後建立 Ingress:

kubectl apply -f my-bsc-ingress.yaml

請稍候幾分鐘,讓 Ingress 控制器設定 HTTP(S) 負載平衡器與相關的後端服務。

查看後端服務

查看 Service:

kubectl get service my-bsc-service

記下在輸出中顯示的節點通訊埠值。舉例來說,以下輸出的節點連接埠值為 30936

NAME             TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
my-bsc-service   NodePort   10.83.15.111   none          80:30936/TCP   2m

在 GCP 專案中列出後端服務。

gcloud compute backend-services list

在輸出中,尋找後端服務的名稱。也就是包含 Service 節點通訊埠的名稱。例如,如果節點通訊埠是 30936,後端服務的名稱會與以下類似:

NAME
...
k8s-be-30936--078bc860bb6f7a2f
...

描述後端服務:

gcloud compute backend-services describe [BACKEND_SERVICE_NAME] --global

其中 [BACKEND_SERVICE_NAME] 是後端服務的名稱。

輸出會顯示您設定的屬性值:

connectionDraining:
  drainingTimeoutSec: 60
...
timeoutSec: 40

設定用戶端 IP 相依性

您可以使用 BackendConfig 來設定 用戶端 IP 相依性

要執行此練習,您需要一個虛擬私人雲端原生叢集。用戶端 IP 相依性 僅在 Services 受 網路端點群組支援時有用, 且網路端點群組需要虛擬私人雲端原生叢集。

若要設定用戶端 IP 相依性,請在 BackendConfig 資訊清單中將 affinityType 設為「CLIENT_IP」。

apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: my-bsc-backendconfig
spec:
  timeoutSec: 40
  connectionDraining:
    drainingTimeoutSec: 60
  sessionAffinity:
    affinityType: "CLIENT_IP"

在 Service 資訊清單中,請納入 cloud.google.com/neg: '{"ingress": true}' 註解:

kind: Service
metadata:
  name: my-bsc-service
  labels:
    purpose: bsc-config-demo
  annotations:
    cloud.google.com/neg: '{"ingress": true}'
    beta.cloud.google.com/backend-config: '{"ports": {"80":"my-bsc-backendconfig"}}'
...

您可以使用 BackendConfig 來設定 已產生 Cookie 的相依性

要執行此練習,您需要一個虛擬私人雲端原生叢集。已產生 Cookie 的相依性 僅在 Services 受 網路端點群組支援時有用, 且網路端點群組需要虛擬私人雲端原生叢集。

若要設定已產生 Cookie 的相依性,請在 BackendConfig 資訊清單中將 affinityType 設為「GENERATED_COOKIE」。您也可以使用 affinityCookieTtlSec 來設定 Cookie 的時間範圍。

sessionAffinity:
  affinityType: "GENERATED_COOKIE"
  affinityCookieTtlSec: 50

在 Service 資訊清單中,請納入 cloud.google.com/neg: '{"ingress": true}' 註解:

kind: Service
metadata:
  name: my-bsc-service
  labels:
    purpose: bsc-config-demo
  annotations:
    cloud.google.com/neg: '{"ingress": true}'
    beta.cloud.google.com/backend-config: '{"ports": {"80":"my-bsc-backendconfig"}}'
...

清除

完成本頁面的練習後,為避免您的帳戶產生不必要的費用,請按照以下步驟移除資源:

刪除您為本練習建立的 Kubernetes 物件:

kubectl delete ingress my-bsc-ingress
kubectl delete service my-bsc-service
kubectl delete backendconfig my-bsc-backendconfig
kubectl delete deployment my-bsc-deployment

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件