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

Server Load Balancer:自己管理型KubernetesクラスターでのALB Ingressの使用

最終更新日:Oct 08, 2024

このトピックでは、自己管理型KubernetesクラスターでApplication Load Balancer (ALB) Ingressを作成する方法について説明します。 これにより、KubernetesクラスターはALBを使用できます。

シナリオ

以下のシナリオは、例として使用される。 Alibaba Cloudリソースに基づいてセルフマネージドKubernetesクラスターを作成し、ALB Ingressを使用してクラスターにリクエストを転送します。

自己管理Kubernetesクラスターにalb-ingress-controllerをデプロイし、ingressとServicesを作成できます。 alb-ingress-controllerは、Kubernetesクラスターの設定に基づいて、転送ルールとしてingressをALBに同期します。 alb-ingress-controllerは、クラスターのAPIサーバーをリッスンすることで、以降のingressの変更も監視し、変更をALBに同期します。 変更が同期された後、ALBはクラスター内の特定のポッドにリクエストを転送します。 詳細については、「ALB Ingressの概要」をご参照ください。

ALB Ingress场景示例

使用上の注意

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

  • AlbConfigs、名前空間、Ingress、およびServicesの名前は、aliyunで始めることはできません。

前提条件

  • バージョンが1.20以降のセルフマネージドKubernetesクラスターがAlibaba Cloud上に作成されます。 kubectlを使用してクラスターに接続できます。 kubectlをダウンロードしてインストールする方法の詳細については、「kubectlのインストールと設定」をご参照ください。

  • クラスターはSNATを使用してインターネットにアクセスできます。 詳細については、「インターネットNATゲートウェイのSNAT機能を使用したインターネットへのアクセス」をご参照ください。

  • 自己管理クラスターにコントローラーイメージを使用するには、次の情報に注意してください。

    • プライベートイメージを使用する場合は、 「ソースコードからコントローラをデプロイします」をご参照し、イメージをコンパイルおよびアップロードできます。

    • 一般的なx86アーキテクチャを使用するクラスターは、Alibaba Cloudのオープンソースイメージをサポートしています。

手順

配置步骤

次の手順では、ファイルを変更する必要があります。 ファイルとファイルの目的を次の表に示します。

ステップ

ファイル

目的

ステップ1: alb-ingress-controllerのデプロイ

load-balancer-controller.yaml

テンプレートに基づいて変更されました。

alb-ingress-controllerのデプロイに使用します。

手順2: AlbConfigとIngressClassの作成

alb.yaml

作成および変更。

AlbConfigとIngressClassを作成するために使用されます。 リソースを作成すると、ALBインスタンスが作成されます。

手順3: テストアプリケーションの展開

test-service.yaml

作成および変更。

テストサービスの展開に使用します。

ステップ4: Ingressの作成

test-ingress.yaml

作成および変更。

Ingressの作成に使用します。

ステップ1: alb-ingress-controllerのデプロイ

説明

インターネットサービスプロバイダー (ISP) のネットワーク品質が悪い場合、展開イメージをプルできないことがあります。 この問題を防ぐには、プライベートイメージを使用できます。 プライベートイメージファイルをコンパイルおよびアップロードする方法の詳細については、 「ソースコードからコントローラをデプロイする方法」をご参照ください。

このトピックでは、alb-ingress-controllerはInClusterモードでデプロイされています。 サービス、エンドポイント、およびノードで権限を設定し、load-balancer-controller.yamlを使用してalb-ingress-controllerをデプロイできます。 サービスアカウント、Deployment、およびConfigMapがプリセットされています。 ビジネス要件に基づいて変更するだけです。

  1. 変更します。Modify theload-balancer-controller.yamlファイルを作成し、展開のイメージを使用可能なイメージアドレスに変更します。

    load-balancer-controller.yamlは、alb-ingress-controllerのデプロイに使用されます。

    変更の前に:

    image: ${path/to/your/image/registry}

    変更後:

    image: alibabacloudslb/alibaba-load-balancer-controller:v1.2.0  #A compiled image that is compatible with the x86 architecture.
  2. load-balancer-controller.yamlファイルを変更し、AccessKey IDとAccessKeyシークレットをConfigMapファイルに設定します。

    説明

    ALBインスタンスを作成するAlibaba Cloudアカウントを使用して、RAMコンソールにログインできます。 次に、AccessKeyページでAccessKey IDとAccessKeyシークレットを表示できます。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: load-balancer-config
      namespace: kube-system
    data:
      cloud-config.conf: |-
           {
               "Global": {
                   "AccessKeyID": "VndV***", # Base64 encoding is required.
                   "AccessKeySecret": "UWU0NnUyTFdhcG***" # Base64 encoding is required.
               }
           }
                            
  3. kubectlを使用してクラスターに接続し、次のコマンドを実行して、変更されたload-balancer-controller.yamlファイルをデプロイ用に送信します。

    kubectl apply -f load-balancer-controller.yaml

    期待される出力:

    clusterrole.rbac.authorization.k8s.io/system:load-balancer-controller created
    serviceaccount/load-balancer-controller created
    clusterrolebinding.rbac.authorization.k8s.io/system:load-controller-manager created
    configmap/load-balancer-config created
    deployment.apps/load-balancer-controller created
  4. 次のコマンドを実行して結果を確認します。

    kubectl -n kube-system get all | grep load-balancer

    次の図に示すように、ポッドのステータスは [実行中] で、alb-ingress-controllerがデプロイされていることを示します。

    alb-ingress-controller部署验证

ステップ2: AlbConfigとIngressClassの作成

AlbConfigとIngressClassが作成されると、ALBインスタンスが同時に作成されます。

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

    alb.yamlは、AlbConfigとIngressClassを作成するために使用されます。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb-demo
    spec:
      config:
        name: alb-test             # alb-test is the name of the ALB instance.
        addressType: Internet      # Intranet specifies an internal-facing ALB instance. Internet specifies an Internet-facing ALB instance. 
        zoneMappings:
        - vSwitchId: vsw-wz9e2usil7e5an1xi****    # vSwitches in at least two zones must be specified.
        - vSwitchId: vsw-wz92lvykqj1siwvif****
      listeners:
        - port: 80
          protocol: HTTP
    ---
    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   # The AlbConfig.
    説明

    次のパラメータに注意してください。

    • albconfig.spec.config.addressType: ALBインスタンスのネットワークタイプ。 有効な値:

      • Internet (デフォルト): インターネット向けALBインスタンス。 インターネット接続のALBインスタンスを作成すると、各ゾーンにパブリックIPアドレスとプライベートIPアドレスが割り当てられます。 インターネット接続ALBインスタンスはelastic IPアドレス (EIP) を使用して、インターネット経由でサービスを提供します。 EIPのインスタンス料金と帯域幅またはデータ転送料金が課金されます。

        • EIPは、インターネット経由でサービスを提供し、ALBインスタンスをインターネットに公開するために使用されます。

        • プライベートIPアドレスにより、仮想プライベートクラウド (VPC) のECS (Elastic Compute Service) インスタンスはALBインスタンスにアクセスできます。

      • イントラネット: 内部に面したALBインスタンス。 内部対応のALBインスタンスを作成すると、各ゾーンにプライベートIPアドレスが割り当てられます。 ALBインスタンスには、内部ネットワーク経由でのみアクセスできます。

    • spec.config.zoneMappings: ALB IngressのvSwitchのID。 異なるゾーンに少なくとも2つのvSwitchを指定する必要があります。 ゾーンはALBでサポートされている必要があります。 ALBでサポートされているリージョンとゾーンの詳細については、「サポートされているリージョンとゾーン」をご参照ください。

  2. kubectlを使用してクラスターに接続し、次のコマンドを実行してalb.yamlファイルをデプロイ用に送信します。

    kubectl apply -f alb.yaml

    期待される出力:

    AlbConfig.alibabacloud.com/alb-demo create
    ingressclass.networking.k8s.io/alb created
  3. かどうかを確認して下さいALBインスタンスが作成されます。

    • 方法1: 次のコマンドを実行して、ALBインスタンスのIDを照会します。

      kubectl get albconfig alb-demo     

      查看ALB实例ID

    • 方法2: ALBコンソールにログインし、ALBコンソールでALBインスタンスを表示します。

      説明

      albコンソールにログインするには、手順1: ALB-ingress-controllerのデプロイのConfigMapファイルで設定されたAlibaba Cloudアカウントを使用する必要があります。

手順3: テストアプリケーションの展開

このトピックでは、テストイメージを使用して展開を作成し、展開を使用してテストアプリケーションを展開します。

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

    test-service.yamlは、test01とtest02という名前の2つのデプロイメントと、test01とtest02という名前の2つのサービスをデプロイするために使用されます。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test01
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: test01
      template:
        metadata:
          labels:
            app: test01
        spec:
          containers:
          - name: test01
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: test01-service
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: test01
      type: NodePort
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test02
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: test02
      template:
        metadata:
          labels:
            app: test02
        spec:
          containers:
          - name: test02
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: test02-service
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: test02
      type: NodePort
  2. kubectlを使用してクラスターに接続し、次のコマンドを実行してデプロイ用のtest-service.yamlファイルを送信します。

    kubectl apply -f test-service.yaml

    期待される出力:

    deployment "test01" created
    service "test01-service" created
    deployment "test02" created
    service "test02-service" created
  3. 次のコマンドを実行して、テストサービスがデプロイされていることを確認します。

    kubectl get svc,deploy  

    次のレスポンスを受け取った場合、テストサービスがデプロイされます。部署测试服务

ステップ4: Ingressを作成する

Ingressは、ALBインスタンスの転送ルールに対応します。 このトピックでは、Ingressはパスに基づいてリクエストを転送します。 詳細については、「ALB Ingressユーザーガイド」をご参照ください。

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

    test-ingress.yamlファイルは、Ingressを作成するために使用されます。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: test-ingress
    spec:
      ingressClassName: alb
      rules:
       - host: demo.domain.ingress.top
         http:
          paths:
          - path: /test01
            pathType: Prefix
            backend:
              service:
                name: test01-service
                port:
                  number: 80
          - path: /test02
            pathType: Prefix
            backend:
              service:
                name: test02-service
                port:
                  number: 80
  2. kubectlを使用してクラスターに接続し、次のコマンドを実行してデプロイ用のtest-ingress.yamlファイルを送信します。

    kubectl apply -f test-ingress.yaml

    期待される出力:

    ingress "test-ingress" created
  3. 次のコマンドを実行して、Ingressが作成されていることを確認します。

    kubectl get ingress

    次のレスポンスが返されると、Ingressが作成されます。创建Ingress

ステップ5: 結果を確認する

カスタムドメイン名を使用したサービスへのアクセス

  1. CNAMEレコードを作成して、カスタムドメイン名をALBで作成されたインスタンスステップ2.

    詳細については、「 (オプション) 手順4: CNAMEレコードの設定」をご参照ください。 この例では、カスタムドメイン名http:// demo.domain.ingress.topALBインスタンスのパブリックドメイン名にマップされています。

  2. 次のコマンドを実行して、ALBインスタンスを使用してtest01という名前のサービスにアクセスします。

    curl http://demo.domain.ingress.top/test01

    结果验证1

  3. 次のコマンドを実行して、ALBインスタンスを使用してtest02という名前のサービスにアクセスします。

    curl http://demo.domain.ingress.top/test02

    结果验证2

ご質問がある場合は、DingTalkグループ31945843に参加してテクニカルサポートを受けてください。

関連ドキュメント

ALB Ingressの概要と機能: