Server Load Balancer (SLB) インスタンスによって公開されているサービスにクラスター外からアクセスするには、SLB インスタンスのドメイン名または <IP:Service port> エンドポイントを使用します。クラスター内からサービスにアクセスするには、<Service name:Service port> エンドポイントを使用します。このトピックでは、NGINX アプリケーションを例として使用して、既存の SLB インスタンスを使用する LoadBalancer サービスを使用してアプリケーションを公開する方法について説明します。
前提条件
Container Service for Kubernetes (ACK) クラスターまたは Serverless Kubernetes クラスター が作成されていること。詳細については、「ACK マネージドクラスターを作成する」、「ACK 専用クラスターを作成する (廃止)」、および「ACK Serverless クラスターを作成する」をご参照ください。
重要ACK クラスターを作成する場合、LoadBalancer サービスのみを作成できます。 LoadBalancer サービスの既存の SLB インスタンスを選択することはできません。既存の SLB インスタンスを使用するには、ACK クラスターの作成時に Ingress をインストールしないように選択します。クラスターの作成後、既存の SLB インスタンスを手動で指定します。詳細については、「CLB インスタンスの作成と管理」および「NLB インスタンスの作成と管理」をご参照ください。
Classic Load Balancer (CLB) インスタンスまたは Network Load Balancer (NLB) インスタンスが SLB コンソール で作成されており、インスタンスが ACK クラスターと同じリージョンにあること。 CLB インスタンスまたは NLB インスタンスの作成方法の詳細については、「CLB インスタンスの作成と管理」および「NLB インスタンスの作成と管理」をご参照ください。
使用上の注意
既存の SLB インスタンスを指定する場合、SLB インスタンスのリスナーの構成方法は、cloud-controller-manager のバージョンによって異なります。
cloud-controller-manager v1.9.3.59-ge3bc999-aliyun 以降のバージョン: 既存の SLB インスタンスを指定する場合、cloud-controller-manager はデフォルトでは SLB インスタンスのリスナーを構成しません。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"アノテーションを追加してリスナーを有効にするか、SLB インスタンスのリスニングルールを手動で構成できます。cloud-controller-manager v1.9.3.59-ge3bc999-aliyun より前のバージョン: 既存の SLB インスタンスを指定する場合、cloud-controller-manager は SLB インスタンスのバックエンドサーバーグループを自動的に作成し、これらのバックエンドサーバーグループを管理します。また、リスナーが手動で構成されている場合でも、SLB インスタンスのリスナーがバックエンドサーバーグループに関連付けられていることを確認します。
注意事項
既存の SLB インスタンスを使用してアプリケーションを公開する前に、注意事項をお読みになることをお勧めします。詳細については、以下のトピックをご参照ください。
手順 1: アプリケーションをデプロイする
このトピックでは、NGINX ステートレスアプリケーションを例として使用して、LoadBalancer サービスを使用してアプリケーションを公開する方法を示します。
ACK コンソールの使用
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のウィンドウで、 を選択します。
[デプロイメント] ページで、[イメージから作成] をクリックし、デプロイメントの基本情報、コンテナ設定、および詳細設定を構成します。
[基本情報] ウィザードページで、[名前] を指定し、その他のパラメーターについてはデフォルト設定を維持し、[次へ] をクリックします。この例では、名前は my-nginx に設定されています。
[コンテナ] ウィザードページで、イメージ名とコンテナポートを指定し、その他のパラメーターについてはデフォルト設定を維持し、[次へ] をクリックします。
パラメーター
有効な値
[イメージ名]
[イメージを選択] をクリックします。 [イメージとイメージタグを選択] ダイアログボックスで、[artifact Center] タブをクリックし、
nginxを検索し、[openanolis/nginx] という名前のイメージリポジトリを選択します。次に、[イメージタグを選択] をクリックし、イメージタグを設定して、[OK] をクリックします。[ポート]
[名前]: nginx
[コンテナポート]: 80
[詳細設定] ウィザードページで、デフォルト設定を維持し、[作成] をクリックして NGINX アプリケーションを作成します。
kubectl の使用
my-nginx.yaml という名前のファイルを作成し、次の YAML コンテンツをファイルに追加します。
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: my-nginx # サンプルアプリケーションの名前 labels: app: nginx spec: replicas: 2 # レプリケートされたポッドの数 selector: matchLabels: app: nginx # アプリケーションを公開するために使用されるサービスのセレクターで同じ値を指定する必要があります。 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 # サービスで公開するポート次のコマンドを実行して、my-nginx アプリケーションをデプロイします。
kubectl apply -f my-nginx.yaml次のコマンドを実行して、アプリケーションのステータスをクエリします。
kubectl get deployment my-nginx予期される出力:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 2/2 2 2 50s
ステップ 2: 既存の SLB インスタンスを使用してアプリケーションを公開する LoadBalancer サービスを作成する
ACK コンソール または kubectl を使用して、アプリケーションを公開する LoadBalancer サービスを作成できます。
ACK コンソールを使用する
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のウィンドウで、 を選択します。
[サービス] ページで、[作成] をクリックします。[サービスの作成] ダイアログボックスで、必須パラメーターを構成します。
パラメーター
説明
例
名前
サービスの名前。
my-nginx-svc
サービスの種類
サービスの種類 を指定します。さまざまな種類のソースからのアクセスを処理するために、次の種類のサービスを作成できます。
[SLB] を選択します。
[SLB の種類] として [CLB] を選択し、[既存のリソースを使用する] を選択します。
ドロップダウンリストから CLB インスタンスを選択します。
この例の CLB インスタンスは新しく作成されたものであり、リスナーで構成する必要があります。そのため、[既存のリスナーを上書きする] を選択します。
外部トラフィックポリシー
[外部トラフィック ポリシー] パラメーターは、[ノード ポート] または [サーバー ロード バランサー] に [サービスの種類] パラメーターを設定した場合にのみ使用できます。外部トラフィック ポリシーの詳細については、「外部トラフィック ポリシーの違い」セクション(「はじめに」トピック)をご参照ください。有効な値:
ローカル: トラフィックを現在のノードのポッドのみにルーティングします。
クラスター: クラスター内の他のノードのポッドにトラフィックをルーティングします。
Local
バックエンド
サービスに関連付けるバックエンドアプリケーション。バックエンドアプリケーションを選択しない場合、エンドポイントオブジェクトは作成されません。詳細については、「セレクターのないサービス」をご参照ください。
名前: app
値: nginx
ポートマッピング
サービスポートとコンテナポート。サービスポートは YAML ファイルの
portフィールドに対応し、コンテナポートは YAML ファイルのtargetPortフィールドに対応します。コンテナポートは、バックエンドポッドで公開されているポートと同じである必要があります。サービスポート: 80
コンテナポート: 80
プロトコル: TCP
アノテーション
SLB インスタンスを構成するためにサービスに追加されるアノテーション。詳細については、「アノテーションを使用して CLB インスタンスを構成する」および「アノテーションを使用して NLB インスタンスを構成する」をご参照ください。
重要クラスター内の API サーバー の SLB インスタンスを再利用しないでください。そうしないと、クラスターアクセスエラーが発生する可能性があります。
該当なし
構成後、[OK] をクリックします。
作成後、サービスの名前をクリックして詳細ページに移動します。 [概要] セクションで、[39.106.XX.XX:80] などのサービスの [外部 IP] をクリックして、アプリケーションにアクセスします。

kubectl を使用する
サービスを作成します。
my-nginx-svc.yaml という名前のファイルを作成し、次の内容をファイルに追加します。
${YOUR_LB_ID} を
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id内で、SLB コンソール で作成した SLB インスタンスの ID に置き換えます。既存の SLB インスタンスを使用する場合、SLB インスタンスのリスナーは作成されず、デフォルトでは SLB インスタンスの既存のリスナーは上書きされません。リスナーを上書きするには、
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listenersを"true"に設定します。この例では、SLB インスタンスが新しく作成されたため、SLB インスタンスのリスナーを作成するためにアノテーションがtrueに設定されています。アノテーションの詳細については、「アノテーションを使用して CLB インスタンスを構成する」および「アノテーションを使用して NLB インスタンスを構成する」をご参照ください。セレクター を 一致ラベルmy-nginx.yaml ファイルの
app: nginxの値、つまり に設定します。これにより、サービスはバックエンドポッドに関連付けられます。
apiVersion: v1 kind: Service # サービスを定義します。 metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${YOUR_LB_ID} service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: 'true' labels: app: nginx name: my-nginx-svc namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancerパラメーター
説明
kindリソースオブジェクトがサービスであることを指定します。
metadata名前、ラベル、名前空間など、サービスに関する基本情報を定義します。
metadata.annotationsLoadBalancer アノテーションを追加できます。この例では、アノテーション service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id を使用して、既存の CLB を指定します。詳細については、「アノテーションを使用して CLB インスタンスを構成する」をご参照ください。
spec.selectorサービスのラベルセレクターを定義します。サービスは、ラベルがラベルセレクターと一致するポッドを公開します。
spec.ports.portクラスター IP アドレスで公開されるサービスポートを指定します。
clusterIP:portにリクエストを送信することで、クラスター内からサービスにアクセスできます。spec.ports.targetPortトラフィックを受信するバックエンドポッドのポートを指定します。サービス
portを流れるトラフィックは、kube-proxy によってバックエンドポッドのポート (targetPortで指定) に転送され、コンテナに到達します。次のコマンドを実行して、my-nginx-svc という名前のサービスを作成し、サービスを使用してアプリケーションを公開します。
kubectl apply -f my-nginx-svc.yaml次のコマンドを実行して、LoadBalancer サービスが作成されたことを確認します。
kubectl get svc my-nginx-svc予期される出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-nginx-svc LoadBalancer 172.21.5.82 39.106.XX.XX 80:30471/TCP 5m次のコマンドを実行して、アプリケーションにアクセスします。
curl <YOUR-External-IP> # <YOUR-External-IP> は前の手順で取得した外部 IP アドレスに置き換えます。予期される出力:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
CLB
CLB インスタンスの作成
CLB インスタンスの作成を選択した場合、CLB インスタンスのアクセスモードをパブリックアクセスまたは内部アクセスに設定し、CLB インスタンスの課金方法をスペック課金または従量課金に設定できます。詳細については、「CLB インスタンスの作成と管理」をご参照ください。
パラメーター | 説明 |
名前 | CLB インスタンスの名前。このパラメーターは、CLB インスタンスを作成する場合にのみ必須です。 |
アクセス方法 | 有効な値: パブリックアクセス と 内部アクセス。 |
課金方法 | 有効な値: スペック課金 と 従量課金 (CU 課金)。詳細については、「CLB 課金」をご参照ください。 |
IP バージョン | IP アドレスのバージョン。有効な値: IPv4 と IPv6。 |
スケジューリングアルゴリズム | 有効な値: ラウンドロビン (RR) と重み付けラウンドロビン (WRR)。デフォルト値: ラウンドロビン (RR)。ラウンドロビン (RR): リクエストはバックエンドサーバーに順番に配信されます。重み付けラウンドロビン (WRR): 重みの大きいバックエンドサーバーは、重みの小さいバックエンドサーバーよりも多くのリクエストを受信します。 |
アクセス制御 | リスナーのアクセス制御機能を有効にするかどうかを指定します。詳細については、「アクセス制御」をご参照ください。 |
ヘルスチェック | ヘルスチェック機能を有効にするかどうかを指定します。ヘルスチェックプロトコルパラメーターを TCP または HTTP に設定できます。ヘルスチェック機能が有効になっている場合、ヘルスチェック機能を使用してバックエンドサーバーのサービス可用性を判断できます。ヘルスチェックの仕組みの詳細については、「CLB ヘルスチェック」をご参照ください。 |
その他 | アノテーションを使用して CLB インスタンスを設定することもできます。詳細については、「アノテーションを使用した CLB インスタンスの設定」をご参照ください。 |
既存の CLB インスタンスの使用
既存の CLB インスタンスの使用の下のドロップダウンリストから既存の CLB インスタンスを選択できます。また、既存のリスナーの上書きを有効にするかどうかを選択することもできます。詳細については、「既存の CLB インスタンスの使用と CLB インスタンスのリスナーの強制上書き」をご参照ください。
既存の CLB インスタンスを使用する場合は、いくつかの制限と使用上の注意に留意する必要があります。詳細については、「LoadBalancer サービスの設定に関する考慮事項」トピックの「使用上の注意」セクションをご参照ください。
詳細設定
パラメーター | 説明 |
スケジューリングアルゴリズム | 有効な値: ラウンドロビン (RR) と重み付けラウンドロビン (WRR)。デフォルト値: ラウンドロビン (RR)。ラウンドロビン (RR): リクエストはバックエンドサーバーに順番に配信されます。重み付けラウンドロビン (WRR): 重みの大きいバックエンドサーバーは、重みの小さいバックエンドサーバーよりも多くのリクエストを受信します。 |
アクセス制御 | リスナーのアクセス制御機能を有効にするかどうかを指定します。詳細については、「アクセス制御」をご参照ください。 |
ヘルスチェック | ヘルスチェック機能を有効にするかどうかを指定します。ヘルスチェックプロトコルパラメーターを TCP または HTTP に設定できます。ヘルスチェック機能が有効になっている場合、ヘルスチェック機能を使用してバックエンドサーバーのサービス可用性を判断できます。ヘルスチェックの仕組みの詳細については、「CLB ヘルスチェック」をご参照ください。 |
その他 | アノテーションを使用して CLB インスタンスを設定することもできます。詳細については、「アノテーションを使用した CLB インスタンスの設定」をご参照ください。 |
NLB
NLB インスタンスの作成
NLB インスタンスの作成を選択した場合、NLB インスタンスのアクセスモードをパブリックアクセスまたは内部アクセスに設定できます。詳細については、「NLB インスタンスの作成と管理」をご参照ください。
パラメーター | 説明 |
名前 | NLB インスタンスの名前。このパラメーターは、NLB インスタンスを作成する場合にのみ必須です。 |
アクセス方法 | 有効な値: パブリックアクセス と 内部アクセス。 |
課金方法 | 有効な値: 従量課金 (CU 課金)。詳細については、「NLB 課金」をご参照ください。 |
IP バージョン | IP アドレスのバージョン。有効な値: IPv4 と デュアルスタック。 |
スケジューリングアルゴリズム | 有効な値:
|
ヘルスチェック | ヘルスチェック機能を有効にするかどうかを指定します。
|
その他 | アノテーションを使用して NLB インスタンスを設定することもできます。詳細については、「アノテーションを使用した NLB インスタンスの設定」をご参照ください。 |
VPC | デフォルトのクラスタ VPC リージョンと VPC ID。 |
Vswitch | VPC 内のインスタンスでサポートされているゾーンの vSwitch を選択するか、新しく作成できます。 |
既存の NLB インスタンスの使用
既存の NLB インスタンスの使用を選択した場合、既存の NLB インスタンスの使用の下のドロップダウンリストから既存の NLB インスタンスを選択できます。また、既存のリスナーの上書きを有効にするかどうかを選択することもできます。詳細については、「既存の NLB インスタンスの使用」をご参照ください。
既存の NLB インスタンスを使用する場合は、いくつかの制限と使用上の注意に留意する必要があります。詳細については、「LoadBalancer サービスの設定に関する考慮事項」トピックの「使用上の注意」セクションをご参照ください。
詳細設定
パラメーター | 説明 |
スケジューリングアルゴリズム | 有効な値:
|
ヘルスチェック | ヘルスチェック機能を有効にするかどうかを指定します。
|
その他 | アノテーションを使用して NLB インスタンスを設定することもできます。詳細については、「アノテーションを使用した NLB インスタンスの設定」をご参照ください。 |
VPC | デフォルトのクラスタ VPC リージョンと VPC ID。 |
Vswitch | VPC 内のインスタンスでサポートされているゾーンの vSwitch を選択するか、新しく作成できます。 |
次の手順
サービスを表示、更新、および削除できます。たとえば、サービスのインターネット向け SLB インスタンスを変更できます。
ACK コンソールを使用する
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のペインで、 を選択します。
[サービス] ページで、サービスをクリックして詳細を表示するか、サービスの [アクション] 列の [更新] または [削除] をクリックして、サービスを更新または削除できます。
kubectl を使用する
サービスを更新する
方法 1: 次のコマンドを実行して、サービスを更新します。
kubectl edit service my-nginx-svc方法 2: サービスを手動で削除し、YAML ファイルを変更してから、サービスを再作成します。
kubectl apply -f my-nginx-svc.yaml
サービスを表示する
次のコマンドを実行して、サービスを表示します。
kubectl get service my-nginx-svc期待される出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-nginx-svc LoadBalancer 172.21.XX.XX 192.168.XX.XX 80:31599/TCP 5mサービスを削除する
次のコマンドを実行して、サービスを削除します。
kubectl delete service my-nginx-svc