Ingress によるバックエンド サービスの構成

このページでは、Kubernetes Ingress オブジェクトを使用して、Google Cloud Platform バックエンド サービスの特定のプロパティを構成する方法について説明します。

概要

GKE クラスタでは、Kubernetes Ingress オブジェクトを作成すると、GKE Ingress コントローラが起動し、Google Cloud Platform HTTP(S) ロードバランサが作成されます。Ingress コントローラは、ロードバランサだけでなく、それに関連付けられた 1 つ以上のバックエンド サービスも構成します。

GKE バージョン 1.11.3-gke.18 以降では、Ingress を使用してバックエンド サービスの次のプロパティを構成できます。

バックエンド サービスの構成情報は、BackendConfig という名前のカスタム リソースに保存されます。

バックエンド サービスのプロパティを構成するには:

  1. BackendConfig を作成します。
  2. サービスを作成し、そのポートの 1 つを BackendConfig に関連付けます。
  3. Ingress を作成して、Ingress を(サービス、ポート)ペアに関連付けます。

始める前に

このタスクの準備として、次の手順を行います。

  • 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
  • Kubernetes IngressService のリソースについて確認します。

  • BackendConfig カスタム リソースについて十分に理解します。

Deployment を作成する

BackendConfig とサービスを作成する前に、Deployment を作成する必要があります。Deployment のマニフェストは次のとおりです。

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 という名前のファイルにコピーして Deployment を作成します。

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

サービスの作成

サービスのマニフェストを次に示します。

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

この演習では、サービスについて次の項目を把握することが重要です。

  • purpose: bsc-config-demo のラベルが付いたポッドは、サービスのメンバーです。

  • サービスの TCP ポート 80 は、my-bsc-backendconfig という名前の BackendConfig に関連付けられています。これは、beta.cloud.google.com/backend-config アノテーションで指定されています。

  • サービスのポート 80 に送信されたリクエストは、いずれかのメンバーポッドのポート 8080 に転送されます。

このマニフェストを my-bsc-service.yaml という名前のファイルに保存して、サービスを作成します。

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 というサービスのポート 80 にルーティングされていることがわかります。

マニフェストを my-bsc-ingress.yaml という名前のファイルにコピーして、Ingress を作成します。

kubectl apply -f my-bsc-ingress.yaml

Ingress コントローラが HTTP(S) ロードバランサと関連のバックエンド サービスを構成するまで数分かかります。

バックエンド サービスの表示

サービスを表示します。

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

出力で、バックエンド サービスの名前を探します。これは、サービスのノードポートを含む名前です。たとえば、ノードポートが 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 アフィニティを構成できます。

この演習を行うには、VPC ネイティブのクラスタが必要です。クライアント IP アフィニティは、ネットワーク エンドポイント グループをベースとするサービスにのみ役立ち、ネットワーク エンドポイント グループには VPC ネイティブのクラスタが必要です。

クライアント 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"

サービス マニフェストに、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 アフィニティを構成できます。

この演習を行うには、VPC ネイティブのクラスタが必要です。生成された Cookie アフィニティは、ネットワーク エンドポイント グループをベースとするサービスにのみ役立ち、ネットワーク エンドポイント グループには VPC ネイティブのクラスタが必要です。

生成された Cookie アフィニティを設定するには、BackendConfig マニフェストで affinityType を「GENERATED_COOKIE」に設定します。affinityCookieTtlSec を使用して Cookie の期間を設定することもできます。

sessionAffinity:
  affinityType: "GENERATED_COOKIE"
  affinityCookieTtlSec: 50

サービス マニフェストに、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 のドキュメント