すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ALB Ingressを使用したサービスへのアクセス

最終更新日:Dec 16, 2024

Application Load Balancer (ALB) Ingressは、HTTP、HTTPS、およびQUICをサポートしており、大規模な高弾力性とレイヤ7トラフィック管理のためのクラウドネイティブアプリケーションの要件を満たしています。 ALB IngressはNGINX Ingressとも互換性があります。 さらに、ALB Ingressは複雑なルートと自動TLS証明書管理をサポートしているため、トラフィックを柔軟に管理できます。 異なるURLを介してクラスター内の異なるサービスにアクセスするようにIngressルールを設定できます。

前提条件

  • ACKサーバーレスクラスターが作成され、クラスターはKubernetes 1.18以降を実行します。 詳細については、「ACK Serverlessクイックスタート」をご参照ください。

  • ACKクラスターがデプロイされている仮想プライベートクラウド (VPC) の異なるゾーンに存在する2つのvSwitchが作成されます。 詳細については、「vSwitchの作成と管理」をご参照ください。

  • ALB Ingressコントローラーがクラスターにインストールされています。 詳細については、「ALB Ingressコントローラーの管理」をご参照ください。

  • kubectlクライアントはACKサーバーレスクラスターに接続されています。 詳細については、「kubectlを使用したACKクラスターへの接続」をご参照ください。

使用上の注意

  • Flannelネットワークプラグインを使用する場合、ALB IngressゲートウェイのバックエンドサービスはNodePortまたはLoadBalancerタイプである必要があります。

  • AlbConfigオブジェクト、名前空間、Ingress、およびServicesの名前は、aliyunで始めることはできません。

  • 以前のNGINX Ingressコントローラーのバージョンでは、Ingressリソースのspec : ingressClassNameフィールドを認識できません。 以前のバージョンのNGINX Ingressコントローラーがインストールされ、ACKクラスターでNGINX IngressとALB Ingressの両方が使用されている場合、ALB IngressはNGINX Ingressコントローラーによって調整される可能性があります。 この問題を回避するには、できるだけ早くNGINX Ingressコントローラーを更新するか、アノテーションを使用してALB IngressのIngressClassesを指定します。 詳細については、「NGINX Ingressコントローラーの更新」または「高度なALB Ingress設定」をご参照ください。

ステップ1: AlbConfigオブジェクトの作成

  1. alb-test.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。 ファイルは、AlbConfigオブジェクトを作成するために使用されます。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb-demo
    spec:
      config:
        name: alb-test
        addressType: Internet
        zoneMappings:
        - vSwitchId: vsw-uf6ccg2a9g71hx8go****
        - vSwitchId: vsw-uf6nun9tql5t8nh15****
      listeners:
        - port: 80
          protocol: HTTP

    パラメーター

    説明

    spec.config.name

    ALBインスタンスの名前。 このパラメーターはオプションです。

    spec.config.addressType

    ALBインスタンスがサービスの提供に使用するIPアドレスのタイプ。 This parameter is required. 有効な値:

    • インターネット: ALBインスタンスはパブリックIPアドレスを使用します。 Ingressのドメイン名は、ALBインスタンスのパブリックIPアドレスに解決されています。 したがって、ALBインスタンスはインターネット経由でアクセスできます。 デフォルト値です。

    • イントラネット: ALBインスタンスはプライベートIPアドレスを使用します。 Ingressのドメイン名はプライベートIPアドレスに解決されます。 したがって、ALBインスタンスには、ALBインスタンスがデプロイされているVPC内でのみアクセスできます。

    spec.config.zoneMappings

    ALB Ingressによって使用されるvSwitchのID。 少なくとも2つのvSwitch IDを指定する必要があります。 vSwitchは、異なるゾーンおよびクラスターが存在するVPCにデプロイする必要があります。 vSwitchのゾーンは、ALB Ingressでサポートされている必要があります。 This parameter is required. ALB Ingressでサポートされているリージョンとゾーンの詳細については、「ALBが利用可能なリージョンとゾーン」をご参照ください。

  2. 次のコマンドを実行して、AlbConfigを作成します。

    kubectl apply -f alb-test.yaml

    期待される出力:

    albconfig.alibabacloud.com/alb-demo created
  3. alb.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。

    Kubernetes 1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-demo

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-demo
  4. 次のコマンドを実行してIngressClassを作成します。

      kubectl apply -f alb.yaml

    期待される出力:

    ingressclass.networking.k8s.io/alb created

ステップ2: サービスのデプロイ

  1. cafe-service.yamlファイルを作成し、次の内容をファイルにコピーします。 このファイルは、coffeeteaという名前の2つの展開と、coffeeteaという名前の2つのサービスを展開するために使用されます。

    YAMLファイルの内容を表示する

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      clusterIP: None
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tea
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: tea
      template:
        metadata:
          labels:
            app: tea
        spec:
          containers:
          - name: tea
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tea-svc
      labels:
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: tea
      clusterIP: None
  2. 次のコマンドを実行して、デプロイメントとサービスをデプロイします。

    kubectl apply -f cafe-service.yaml

    期待される出力:

    deployment "coffee" created
    service "coffee-svc" created
    deployment "tea" created
    service "tea-svc" created
  3. デプロイメントとサービスのステータスを照会します。

    1. 次のコマンドを実行して、アプリケーションのデプロイの進行状況を照会します。

      kubectl get deploy

      期待される出力:

      NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
      coffee                           1/2     2            1           2m26s
      tea                              1/1     1            1           2m26s
    2. 次のコマンドを実行して、サービスのステータスを照会します。

      kubectl get svc

      期待される出力:

      NAME                          TYPE           CLUSTER-IP       EXTERNAL-IP           PORT(S)                 AGE
      coffee-svc                    NodePort       172.16.XX.XX     <none>                80:32056/TCP            9m38s
      tea-svc                       NodePort       172.16.XX.XX     <none>                80:31696/TCP            9m38s

ステップ3: ALB Ingressの設定

  1. cafe-ingress.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。

    Kubernetes 1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cafe-ingress 
    spec:
      ingressClassName: alb
      rules:
       - host: demo.domain.ingress.top
         http:
          paths:
          # Configure a context path.
          - path: /tea
            pathType: ImplementationSpecific
            backend:
              service:
                name: tea-svc
                port:
                  number: 80
          # Configure a context path.
          - path: /coffee
            pathType: ImplementationSpecific
            backend:
              service:
                name: coffee-svc
                port: 
                  number: 80

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: cafe-ingress
    spec:
      ingressClassName: alb
      rules:
       - host: demo.domain.ingress.top
         http:
          paths:
          # Configure a context path. 
          - path: /tea
            backend:
              serviceName: tea-svc
              servicePort: 80
          # Configure a context path. 
          - path: /coffee
            backend:
              serviceName: coffee-svc
              servicePort: 80
  2. 次のコマンドを実行して、外部からアクセス可能なドメイン名とcoffeeおよびtea Servicesのパスを個別に設定します。

    kubectl apply -f cafe-ingress.yaml

    期待される出力:

    ingress.networking.k8s.io/cafe-ingress created
  3. 次のコマンドを実行して、ALBインスタンスの公開に使用されるIngressのドメイン名を照会します。

    kubectl get ing

    期待される出力:

    NAME           CLASS    HOSTS                         ADDRESS                                               PORTS   AGE
    cafe-ingress   alb      demo.domain.ingress.top       alb-m551oo2zn63yov****.cn-hangzhou.alb.aliyuncs.com   80      50s

ステップ4: サービスへのアクセス

  • ALBインスタンスのアドレスを取得したら、CLIを使用してcoffee Serviceにアクセスします。

    curl -H Host:demo.domain.ingress.top http://alb-lhwdm5c9h8lrcm****.cn-hangzhou.alb.aliyuncs.com/coffee
  • ALBインスタンスのアドレスを取得したら、CLIを使用してteaサービスにアクセスします。

    curl -H Host:demo.domain.ingress.top http://alb-lhwdm5c9h8lrcm****.cn-hangzhou.alb.aliyuncs.com/tea

関連ドキュメント

  • さまざまなドメイン名またはURL宛てのリクエストのさまざまなバックエンドサーバーグループへの転送、ヘルスチェック、HTTPからHTTPSへのリクエストのリダイレクト、カナリアリリース、カスタムリスナーポートなどの高度なALB Ingress設定の詳細については、「高度なALB Ingress設定」をご参照ください。

  • カスタムALB Ingressルーティングルール、転送条件、およびアクションを設定する方法の詳細については、「ALB Ingressのルーティングルールのカスタマイズ」をご参照ください。

  • HTTPSリクエストを転送するようにHTTPSリスナーを設定する方法の詳細については、「暗号化通信用のHTTPS証明書の設定」をご参照ください。

  • ALB Ingressの問題のトラブルシューティング方法の詳細については、「ALB Ingress FAQ」をご参照ください。