Ingress の有効化

このページでは、GKE On-Prem クラスタで Ingress を有効にする方法について説明します。

管理ワークステーションへの SSH 接続

管理ワークステーションに SSH で接続します。

ssh -i ~/.ssh/vsphere_workstation ubuntu@[IP_ADDRESS]

ここで、[IP_ADDRESS] は管理ワークステーションの IP アドレスです。

このトピックの残りの手順はすべて管理ワークステーションで行います。

Ingress の有効化

ユーザー クラスタが実行されたら、Istio ゲートウェイ オブジェクトを作成して Ingress を有効にする必要があります。この Istio ゲートウェイ オブジェクトはネットワーク上り(内向き)トラフィックに必要です。承認ポリシーなどの他のユースケースで使用またはサポートされることはありません。ゲートウェイ マニフェストの最初の部分は常に次のようになります。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: istio-autogenerated-k8s-ingress
  namespace: gke-system
spec:
  selector:
    istio: ingress-gke-system

ゲートウェイにフィールドを追加して、クラスタへの送信を許可するトラフィックを指定できます。ゲートウェイを使用して受信リクエストを管理する方法については、トラフィック管理をご覧ください。

次のゲートウェイ マニフェストでは、クライアントは HTTP/2 プロトコルと任意のホスト名を使用して、ポート 80 でリクエストを送信できます。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: istio-autogenerated-k8s-ingress
  namespace: gke-system
spec:
  selector:
    istio: ingress-gke-system
  servers:
  - port:
      number: 80
      protocol: HTTP2
      name: http
    hosts:
    - "*"

Ingress サービスで HTTPS リクエストを受け入れる場合は、Ingress サービスがクライアントに提示できる証明書を 1 つ以上指定する必要があります。

証明書を提供するには:

  1. 証明書と鍵を保持する Kubernetes Secret を作成します。
  2. Secret を参照するゲートウェイ オブジェクトを作成するか、Secret を参照するように既存のゲートウェイ オブジェクトを変更します。ゲートウェイ オブジェクトの名前は istio-autogenerated-k8s-ingress にする必要があります。

たとえば、すでに証明書ファイル ingress-wildcard.crt と鍵ファイル ingress-wildcard.key を作成しているとします。

ingressgateway-wildcard-certs という名前の Secret を作成します。

kubectl create secret tls \
    --namespace gke-system \
    ingressgateway-wildcard-certs \
    --cert ./ingress-wildcard.crt \
    --key ./ingress-wildcard.key

次のゲートウェイ マニフェストは Secret を参照します。クライアントは、HTTPS プロトコルと *.example.com に一致する任意のホスト名を使用して、ポート 443 で呼び出すことができます。証明書のホスト名は、マニフェストのホスト名と一致する必要があります(この例では *.example.com)。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: istio-autogenerated-k8s-ingress
  namespace: gke-system
spec:
  selector:
    istio: ingress-gke-system
  servers:
  - port:
      number: 80
      protocol: HTTP2
      name: http
    hosts:
    - "*"
  - hosts:
    - "*.example.com"
    port:
      name: https-demo-wildcard
      number: 443
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: ingressgateway-wildcard-certs

ゲートウェイ マニフェストを変更することで、ホストごとに複数の TLS 証明書を作成できます。

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

kubectl apply -f my-gateway.yaml