Kubernetes Ingress のリソースは、クラスタ外からクラスタ内の 1 つ以上のサービスに HTTP または HTTPS ルーティングを提供します。Tanzu Kubernetes クラスタは、NGINX などのサードパーティ製コントローラを介した入力をサポートします。

このチュートリアルは、Tanzu Kubernetes クラスタ内のサービスに外部トラフィックをルーティングする際に、NGINX に基づく Kubernetes Ingress サービスをデプロイする方法を示しています。Ingress サービスには Ingress コントローラが必要です。NGINX Ingress Controller は、Helm を使用してインストールします。Helm は Kubernetes のパッケージ マネージャです。

注: このタスクを実行する方法はいくつかあります。ここに記載されている手順では、1 つの方法を示します。環境によっては、他の方法が適している場合があります。

前提条件

手順

  1. Helm ドキュメントを参照して、Helm をインストールします。
  2. Helm を使用して NGINX Ingress Controller をインストールします。
    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    helm install ingress-nginx ingress-nginx/ingress-nginx
  3. NGINX Ingress Controller が LoadBalancer タイプのサービスとしてデプロイされていることを確認します。
    kubectl get services
    NAME                                 TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
    ingress-nginx-controller             LoadBalancer   10.16.18.20    10.19.14.76   80:30635/TCP,443:30873/TCP   59m
    ingress-nginx-controller-admission   ClusterIP      10.87.41.25    <none>        443/TCP                      59m
    
  4. 外部 IP アドレスを使用してロード バランサを ping します。
    ping 10.19.14.76
    Pinging 10.19.14.76 with 32 bytes of data:
    Reply from 10.19.14.76: bytes=32 time<1ms TTL=62
    Reply from 10.19.14.76: bytes=32 time=1ms TTL=62
    
  5. NGINX Ingress Controller が実行されていることを確認します。
    kubectl get pods
    NAME                                        READY   STATUS    RESTARTS   AGE
    ingress-nginx-controller-7c6c46898c-v6blt   1/1     Running   0          76m
  6. Ingress ルールと ingress-hello.yaml という名前のパスを含む Ingress リソースを作成します。
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: ingress-hello
    spec:
      rules:
      - http:
          paths:
          - path: /hello
            backend:
              serviceName: hello
              servicePort: 80
    
  7. ingress-hello リソースをデプロイします。
    kubectl apply -f ingress-hello.yaml
    ingress.networking.k8s.io/ingress-hello created
  8. Ingress リソースがデプロイされたことを確認します。
    IP アドレスは Ingress コントローラの外部 IP アドレスにマッピングされることに注意してください。
    kubectl get ingress
    NAME            CLASS    HOSTS   ADDRESS         PORTS   AGE
    ingress-hello   <none>   *       10.19.14.76     80      51m
  9. hello テスト アプリケーションおよび ingress-hello-test.yaml という名前のサービスを作成します。
    kind: Service
    apiVersion: v1
    metadata:
      name: hello
    spec:
      selector:
        app: hello
        tier: backend
      ports:
      - protocol: TCP
        port: 80
        targetPort: http
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: hello
          tier: backend
          track: stable
      template:
        metadata:
          labels:
            app: hello
            tier: backend
            track: stable
        spec:
          containers:
            - name: hello
              image: "gcr.io/google-samples/hello-go-gke:1.0"
              ports:
                - name: http
                  containerPort: 80
    
  10. ingress-hello-test リソースをデプロイします。
    kubectl apply -f ingress-hello-test.yaml
    service/hello created
    deployment.apps/hello created
  11. hello デプロイを使用できることを確認します。
    kubectl get deployments
    NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
    hello                      3/3     3            3           4m59s
    ingress-nginx-controller   1/1     1            1           3h39m
    
  12. NGINX Ingress Controller によって使用されるロード バランサのパブリック IP アドレスを取得します。
    kubectl get ingress
    NAME            CLASS    HOSTS   ADDRESS         PORTS   AGE
    ingress-hello   <none>   *       10.19.14.76     80      13m
  13. ブラウザを使用してパブリック IP アドレスに移動し、Ingress のパスを含めます。
    http://10.19.14.76/hello
    「hello」というメッセージが返されます。
    {"message":"Hello"}

結果

クラスタ内で実行されているサービスの背後にあるバックエンド アプリケーションに外部からアクセスするには、ロード バランサの外部 IP アドレスを使用して、Ingress コントローラを介してブラウザからアクセスします。