このトピックでは、Container Service for Kubernetes (ACK) オートモードクラスターにワークロードをデプロイし、ALB Ingress を使用してインターネットに公開する方法を説明します。これらの手順を完了すると、指定されたドメイン名でアプリケーションにアクセスし、効率的な外部トラフィック管理と負荷分散を実現できます。
このトピックでは、次の操作について説明します。
-
サンプルアプリケーション用の名前空間を作成します。
-
サンプルの Nginx アプリケーションをデプロイし、Service を作成してアプリケーションをクラスターネットワークに公開します。
-
ALB Ingress を作成して、アプリケーションをインターネットに公開します。手動で ALB インスタンスを管理するための AlbConfig を作成し、AlbConfig に関連付ける IngressClass を作成する必要があります。
-
デプロイが成功したことを確認し、ブラウザーからアプリケーションにアクセスします。不要になったリソースは解放できます。
これらの操作を完了すると、次のようになります。
-
2 つのレプリカを持つ、実行中のサンプル Nginx アプリケーション。
-
ALB Ingress と Service が提供する、アプリケーション用の安定したパブリックエントリーポイント。
-
ACK オートモードがアプリケーションの負荷に基づいてリソースを自動的にスケーリングし、ノードライフサイクルを管理するため、運用オーバーヘッドが削減されます。
前提条件
ステップ 1:名前空間の作成
このチュートリアル用のリソースを分離するために、名前空間を作成します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[名前空間とクォータ] をクリックします。
-
作成する をクリックします。表示されるダイアログボックスで、カスタム名前空間名 (このトピックでは my-nginx-namespace を例として使用します) を入力し、ページのプロンプトに従って他の設定を行い、OK をクリックします。
ステップ 2:Nginx アプリケーションと Service のデプロイ
このセクションでは、my-nginx という名前のサンプルの Nginx Deployment と my-nginx-svc という名前の Service をデプロイして、アプリケーションを公開します。
-
Deployment:2 つのレプリカ。イメージはサンプルの Nginx アプリケーションを使用します。ポート 80 は HTTP トラフィックを受信するために公開されます。
-
Service:Service タイプは ClusterIP です。Service ポート 80 は Pod コンテナーポート 80 にマッピングされます。Service はラベルセレクターを使用して Pod を照合します。
このセクションでは、サンプル手順のみを説明します。ワークロードと Service を作成する詳細な手順については、「ワークロードの作成」および「Service 管理」をご参照ください。
-
次の内容で my-nginx.yaml という名前のファイルを作成し、Deployment と Service をデプロイします。
apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx # サンプルアプリケーションの名前。 namespace: my-nginx-namespace # 作成した名前空間の名前に置き換えます。 labels: app: nginx spec: replicas: 2 # レプリカの数。 selector: matchLabels: app: nginx # このアプリケーションを公開するには、値が Service のセレクターと一致する必要があります。 template: metadata: labels: app: nginx spec: # nodeSelector: # env: test-team containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 # このポートは Service で公開する必要があります。 --- apiVersion: v1 kind: Service metadata: labels: app: nginx name: my-nginx-svc namespace: my-nginx-namespace # 作成した名前空間の名前に置き換えます。 spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: ClusterIP # Flannel を使用する場合は、NodePort を使用する必要があります。 -
Deployment と Service をデプロイします。
kubectl apply -f my-nginx.yaml -
Deployment と Service のステータスを確認します。
-
Deployment のステータスを確認します。
kubectl get deployment my-nginx -n my-nginx-namespace期待される出力:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 2/2 2 2 4m36s -
Service のステータスを確認します。
kubectl get svc my-nginx-svc -n my-nginx-namespace期待される出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-nginx-svc ClusterIP 192.XX.XX.164 <none> 80/TCP 42s
-
ステップ 3:ALB Ingress と関連リソースの作成
ALB Ingress を使用してクラスター内のアプリケーションにアクセスする外部トラフィックを管理するには、次のリソースを準備する必要があります。
ALB Ingress を作成する前に、「ALB Ingress 管理」でその原則と要件について確認することを推奨します。
-
ALB Ingress コントローラー: Ingress リソースを管理するコンポーネント。クラスターでオートモードを有効にすると、 ALB Ingress コントローラーがデフォルトでインストールされます。
-
AlbConfig: ALB Ingress コントローラーによって作成されるカスタムリソース定義 (CRD) であり、 ALB インスタンスの設定を宣言します。各 AlbConfig は 1 つの ALB インスタンスに対応します。ALB インスタンスは、ユーザーリクエストのエントリーポイントであり、リクエストをバックエンドの Service に転送します。
-
IngressClass: ALB Ingress を作成するときに、この IngressClass を指定して、対応する AlbConfig を参照できます。これにより、特定のアプリケーションルーティング設定と負荷分散ポリシーを適用できます。
AlbConfig の作成
-
次の内容で alb.yaml という名前のファイルを作成し、AlbConfig を作成します。
-
この AlbConfig は、
addressTypeをInternetに設定します。これは、ALB インスタンスにパブリック IP アドレスが割り当てられ、その DNS ドメイン名がパブリック IP アドレスに解決され、インスタンスがインターネットからアクセス可能になることを意味します。 -
vSwitchIdには、2 つの異なるゾーンにある vSwitch の ID を 2 つ入力します。vSwitch は、クラスターと同じ VPC に属し、ALB でサポートされているゾーン内にある必要があります。VPC コンソールでは、vSwitch ページで vSwitch ID を取得できます。 vSwitch を作成する必要がある場合は、「vSwitch の作成と管理」をご参照ください。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: name: alb addressType: Internet # ロードバランサーのアドレスタイプ。Internet-facing の ALB インスタンスは、インターネット経由でアクセスできます。 zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # お使いの vSwitch の ID に置き換えてください。 - vSwitchId: vsw-uf6nun9tql5t8nh15**** # お使いの vSwitch の ID に置き換えてください。 listeners: - port: 80 protocol: HTTP -
-
AlbConfig を作成します。
kubectl apply -f alb.yaml -
AlbConfig リソースを表示します。
kubectl get AlbConfig alb期待される出力:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb alb-****** alb-******.<regionID>.alb.aliyuncs.com 60s説明PORT&PROTOCOLフィールドとCERTIDフィールドは、HTTPS リスナーを作成して証明書を設定した後にのみ入力されます。これらのフィールドが空であることは正常です。
IngressClass の作成
-
次の内容で ingress_class.yaml という名前のファイルを作成し、IngressClass を作成します。
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb # IngressClass に関連付ける AlbConfig の名前。 -
IngressClass を作成します。
kubectl apply -f ingress_class.yaml
ALB Ingress の作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
-
Ingress ページで、作成した名前空間を選択し、ingress の作成 をクリックします。ingress の作成 ダイアログボックスで、Ingress を設定し、画面の指示に従って Ingress を作成します。
次の表では、主要なパラメーターのみを説明します。パラメーターや DNS 解決の設定などの関連操作の詳細については、「ALB Ingress の作成」をご参照ください。
パラメーター
説明
[ゲートウェイタイプ]
ALB Ingress を選択します。
名前
Ingress のカスタム名 (my-albingress など) を入力します。
IngressClass
対応する AlbConfig を参照するため、作成した IngressClass を選択します。
ルール
-
[名]: 宛先 サービスとして、お客様が作成した サービスを選択します。
-
[ポート]:サービス用に公開するポートを選択します。この例では 80 です。
その他のパラメーターはデフォルト値のままにします。
Ingress が作成されたら、Ingress ページに戻ります。約 1 分後、 エンドポイント 列から DNS 名を見つけてコピーします。
-
ステップ 4:アプリケーションへのアクセス
DNS 名をブラウザーに貼り付けて、Nginx アプリケーションにアクセスします。
ブラウザーには、 Welcome to nginx on Anolis OS! というタイトルのデフォルトの Nginx ウェルカムページが表示されます。これは、Web サーバーが期待どおりに実行されており、ALB Ingress の設定が正しく機能していることを示します。
(オプション) ステップ 5:リソースのクリーンアップ
このトピックで作成したリソースには、Deployment、 Service、 AlbConfig、 IngressClass、 ALB Ingress が含まれます。次のコマンドを実行して、リソースをクリーンアップします。
次のコマンドのサンプル名を、実際のリソース名に置き換えてください。
kubectl delete deployment my-nginx -n my-nginx-namespace
kubectl delete service my-nginx-svc -n my-nginx-namespace
kubectl delete ingress my-albingress -n my-nginx-namespace
kubectl delete albconfig alb
kubectl delete ingressclass alb
関連ドキュメント
-
ワークロード作成のパラメーターに関する詳細については、「ワークロードの作成」をご参照ください。推奨される設定については、「推奨されるワークロード設定」をご参照ください。
-
HTTPS リスナーを使用する場合は、 SSL/TLS 証明書を設定する必要があります。ALB Ingress でサポートされている証明書の設定方法の詳細については、「暗号化通信を有効にするための HTTPS 証明書の設定」をご参照ください。
-
AlbConfig リソースを設定して、ALB インスタンスの設定をカスタマイズできます。詳細については、「ALB Ingress 設定ディクショナリ」をご参照ください。