このトピックでは、Alibaba Cloud にデプロイされたセルフマネージド Kubernetes クラスターで ALB Ingress を使用する方法について説明します。
シナリオ例
このトピックでは、次の図に示すシナリオを使用します。Alibaba Cloud リソース上に構築されたセルフマネージド Kubernetes クラスターがあり、ALB Ingress を使用してリクエストを転送したいと考えています。
セルフマネージド Kubernetes クラスターに `alb-ingress-controller` をデプロイし、Ingress および Service リソースを作成できます。`alb-ingress-controller` は、Kubernetes クラスターのサービス構成に基づいて、Ingress リソースを転送ルールとして ALB に同期します。また、クラスターの API サーバーを監視して Ingress リソースの変更を検出し、その変更を ALB に同期します。ALB はこれらの変更を検出し、クラスター内の対応する Pod にトラフィックを動的に転送します。詳細については、「ALB Ingress の管理」をご参照ください。

注意事項
Flannel などのオーバーレイネットワークプラグインを使用する場合、ALB Ingress のバックエンドサービスは NodePort および LoadBalancer タイプのみをサポートします。
AlbConfig、Namespace、Ingress、Service などのリソース名は `aliyun` で始めることはできません。
前提条件
Alibaba Cloud にデプロイされた v1.20 以降のセルフマネージド Kubernetes クラスターが必要です。kubectl ツールを使用してクラスターに接続できます。kubectl ツールのダウンロードとインストール方法の詳細については、「kubectl のインストールとセットアップ」をご参照ください。
ソースネットワークアドレス変換 (SNAT) を使用して、クラスターのパブリックネットワークアクセスが有効になっています。詳細については、「インターネット NAT ゲートウェイの SNAT 機能を使用してインターネットにアクセスする」をご参照ください。
セルフマネージドクラスターにコントローラーイメージを使用する場合は、次の点に注意してください。
プライベートイメージを使用する場合は、イメージをコンパイルしてアップロードできます。詳細については、オープンソースドキュメント「ソースコードからコントローラーをデプロイする方法」をご参照ください。
x86 アーキテクチャを使用するクラスターでは、テスト用にパブリックな Alibaba Cloud イメージを使用できます。
手順

以下の手順にはファイルの変更が含まれます。各ファイルの名前と目的を必ず理解してください。
ステップ | ファイル名 | 目的 |
load-balancer-controller.yaml テンプレートから変更 | alb-ingress-controller のデプロイに使用 | |
alb.yaml 作成および変更 | albconfig および ingressClass リソースを作成し、ALB インスタンスを同期的に作成するために使用 | |
test-service.yaml 作成および変更 | テストサービスのデプロイに使用 | |
test-ingress.yaml 作成および変更 | Ingress の作成に使用 |
ステップ 1: alb-ingress-controller のデプロイ
キャリアネットワークの問題により、システムがデプロイメントイメージをプルできない場合があります。この問題が発生した場合は、プライベートイメージを使用してください。イメージをコンパイルしてアップロードできます。詳細については、オープンソースドキュメント「ソースコードからコントローラーをデプロイする方法」をご参照ください。
alb-ingress-controller は InCluster モードで起動し、load-balancer-controller.yaml ファイルを使用してデプロイされます。Service、Endpoint、Node などのリソースをリッスンする権限が構成されています。関連する ServiceAccount、Deployment、ConfigMap は事前構成されています。要件に基づいて構成を変更してください。
load-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 # x86 用にコンパイルされたイメージ`load-balancer-controller.yaml` ファイルを変更して、ConfigMap で AccessKey ID と AccessKey Secret を構成します。
説明ALB インスタンスの作成に使用する Alibaba Cloud アカウントを使用して Resource Access Management (RAM) コンソールにログインし、AccessKey ページで AccessKey ID と AccessKey Secret を表示できます。
apiVersion: v1 kind: ConfigMap metadata: name: load-balancer-config namespace: kube-system data: cloud-config.conf: |- { "Global": { "AccessKeyID": "<YOUR_ACCESS_KEY_ID>", # Base64 エンコーディングが必要 "AccessKeySecret": "<YOUR_ACCESS_KEY_SECRET>" # Base64 エンコーディングが必要 } }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次のコマンドを実行して、alb-ingress-controller のデプロイメントを検証します。
kubectl -n kube-system get all | grep load-balancer次の図に示すように、Pod のステータスが Running であれば、デプロイは成功です。

ステップ 2: AlbConfig および IngressClass リソースの作成
AlbConfig および IngressClass リソースが作成されると、ALB インスタンスも作成されます。
`alb.yaml` ファイルを作成し、次の内容をファイルにコピーします。
`alb.yaml` ファイルは、AlbConfig および IngressClass リソースを作成するために使用されます。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-demo spec: config: name: alb-test # alb-test は ALB インスタンスの名前です。 addressType: Internet # Intranet はプライベートネットワークを指定し、Internet はインターネットを指定します。 zoneMappings: - vSwitchId: vsw-wz9e2usil7e5an1xi**** # ALB には、少なくとも 2 つのゾーンにある vSwitch の ID が必要です。 - 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 # 指定された AlbConfig リソース。説明次の 2 つのパラメーターの構成に注意してください。
albconfig.spec.config.addressType: インスタンスのネットワークタイプ。有効な値は次のとおりです。
Internet (デフォルト): インスタンスはインターネットに接続されます。各ゾーンでパブリック IP アドレスとプライベート IP アドレスが提供されます。インターネット向けの ALB インスタンスは、Elastic IP Address (EIP) を使用してパブリックネットワークアクセスを提供します。このオプションを選択すると、EIP インスタンスと帯域幅またはデータ転送に対して課金されます。
EIP は、パブリック向けのサービスを提供し、インターネット経由での ALB へのアクセスを許可します。
プライベート IP アドレスにより、VPC 内の ECS インスタンスが ALB にアクセスできます。
Intranet: インスタンスはプライベートネットワークに接続されます。各ゾーンでプライベート IP アドレスが提供されます。ALB インスタンスは、Alibaba Cloud 内部ネットワーク経由でのみアクセスでき、インターネットからはアクセスできません。
spec.config.zoneMappings: ALB Ingress の vSwitch ID を指定します。異なるゾーンにある少なくとも 2 つの vSwitch の ID を指定する必要があります。指定された vSwitch は、ALB がサポートするゾーンにある必要があります。ALB がサポートするリージョンとゾーンの詳細については、「サポートされているリージョンとゾーン」をご参照ください。
kubectl を使用してクラスターに接続し、次のコマンドを実行して `alb.yaml` ファイルをデプロイします。
kubectl apply -f alb.yaml期待される出力:
AlbConfig.alibabacloud.com/alb-demo create ingressclass.networking.k8s.io/alb createdALB インスタンスが作成されたことを確認します。
方法 1: 次のコマンドを実行して、ALB インスタンス ID を表示します。
kubectl get albconfig alb-demo
方法 2: Application Load Balancer コンソールにログインして、作成された ALB インスタンスを表示します。
説明「ステップ 1: alb-ingress-controller のデプロイ」の ConfigMap ファイルで構成されている Alibaba Cloud アカウントを使用してコンソールにログインします。
ステップ 3: テストアプリケーションのデプロイ
このステップでは、テストイメージを使用して Deployment リソースを作成します。このリソースは、テストアプリケーションをデプロイするために使用されます。
`test-service.yaml` ファイルを作成し、次の内容をファイルにコピーします。
`test-service.yaml` ファイルは、test01 と test02 という名前の 2 つの Deployment と、test01-service と test02-service という名前の 2 つの Service をデプロイするために使用されます。
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: NodePortkubectl を使用してクラスターに接続し、次のコマンドを実行して `test-service.yaml` ファイルをデプロイします。
kubectl apply -f test-service.yaml期待される出力:
deployment "test01" created service "test01-service" created deployment "test02" created service "test02-service" created次のコマンドを実行して、テストサービスがデプロイされていることを確認します。
kubectl get svc,deploy次のような応答が返された場合、テストサービスはデプロイされています。

ステップ 4: Ingress の作成
Ingress は、ALB インスタンスの転送ルールに対応します。このトピックでは、パスベースの転送機能を使用する構成について説明します。高度な機能の詳細については、「ALB Ingress ユーザーガイド」をご参照ください。
`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: 80kubectl を使用してクラスターに接続し、次のコマンドを実行して `test-ingress.yaml` ファイルをデプロイします。
kubectl apply -f test-ingress.yaml期待される出力:
ingress "test-ingress" created次のコマンドを実行して、test-ingress リソースの作成を検証します。
kubectl get ingress次のような応答が返された場合、test-ingress リソースは作成されています。

ステップ 5: 結果の検証
名前解決によるサービスへのアクセス
CNAME レコードを作成して、ドメイン名を ALB インスタンスの DNS 名にマッピングします。詳細については、「ALB インスタンスの CNAME レコードを追加する」をご参照ください。
この例では、カスタムドメイン名
demo.domain.ingress.topが ALB インスタンスのパブリックサービスドメイン名にマッピングされていることを前提としています。次のコマンドを実行して、ALB インスタンスを使用して test01 サービスにアクセスします。
curl http://demo.domain.ingress.top/test01
次のコマンドを実行して、ALB インスタンスを使用して test02 サービスにアクセスします。
curl http://demo.domain.ingress.top/test02
ご不明な点がある場合は、DingTalk グループ ALB お客様コミュニケーション群 (ID: 31945843) に参加してサポートを受けてください。
関連ドキュメント
ALB Ingress の概要と特徴: