Server Load Balancer (SLB) インスタンスが使用できない場合、cloud-controller-manager コンポーネントは、LoadBalancer サービス用に Classic Load Balancer (CLB) または Network Load Balancer (NLB) インスタンスを自動的に作成および管理します。このトピックでは、自動的に作成された SLB インスタンスを使用して NGINX アプリケーションを公開する方法について説明します。
注意事項
CCM による負荷分散管理
CCM は、
Type=LoadBalancer設定のサービスに対してのみ SLB リソースを作成および構成します。CCM は宣言型 API を使用し、特定の条件が満たされた場合、公開されたサービスの構成と一致するように SLB インスタンスの構成を自動的に更新します。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners:をtrueに設定すると、SLB コンソールで変更した SLB 構成が CCM によって上書きされる可能性があります。
サービスの設定を Type=LoadBalancer から Type!=LoadBalancer に変更すると、CCM はそのサービス用に作成された SLB インスタンスの構成を削除します。その結果、SLB インスタンスを使用してサービスにアクセスできなくなります。
CCM によって作成および管理される SLB インスタンスの場合、SLB コンソールでインスタンスの構成を変更しないことをお勧めします。変更すると、CCM が構成を上書きし、関連するサービスにアクセスできなくなる可能性があります。
SLB
CCM は、
Type=LoadBalancer設定のサービス用に SLB インスタンスを作成します。デフォルトでは、Alibaba Cloud アカウント内に最大 60 個の SLB インスタンスを持つことができます。さらに SLB インスタンスを作成するには、Quota Centerコンソールにログインしてアプリケーションを送信ことにより、クォータの増加を申請してください。CCM は、サービス構成に基づいて、SLB インスタンスのバックエンドサーバーグループに Elastic Compute Service (ECS) インスタンスを自動的に追加します。
デフォルトでは、1 つの ECS インスタンスを最大 50 個のバックエンドサーバーグループに追加できます。ECS インスタンスをさらに多くのバックエンドサーバーグループに追加するには、Quota Centerコンソールにログインしてアプリケーションを送信ことにより、クォータの増加を申請してください。
デフォルトでは、1 つの SLB インスタンスに最大 200 台のバックエンドサーバーを追加できます。SLB インスタンスにさらに多くのバックエンドサーバーを追加するには、Quota Centerコンソールにログインしてアプリケーションを送信ことにより、クォータの増加を申請してください。
CCM は、サービスポートを使用するリスナーを SLB インスタンスに自動的に作成します。デフォルトでは、各 SLB インスタンスは最大 50 個のリスナーをサポートします。各 SLB インスタンスでサポートされるリスナーの数を増やすには、Quota Centerコンソールにログインしてアプリケーションを送信ことにより、クォータの増加を申請してください。
SLB の制限の詳細については、CLB の制限と NLB の制限をご参照ください。
SLB コンソールのクォータセンターページにアクセスして、SLB リソースクォータをクエリできます。
ステップ 1: アプリケーションをデプロイする
このトピックでは、NGINX ステートレスアプリケーションを例として使用して、LoadBalancer サービスを使用してアプリケーションを公開する方法を示します。
ACK コンソールの使用
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけて、その名前をクリックします。左側のウィンドウで、 を選択します。
[デプロイメント] ページで、[イメージから作成] をクリックし、デプロイメントの基本情報、コンテナ設定、および詳細設定を構成します。
[基本情報] ウィザードページで、[名前] を指定し、その他のパラメータのデフォルト設定を維持して、[次へ] をクリックします。この例では、名前は my-nginx に設定されています。
[コンテナ] ウィザードページで、イメージ名とコンテナポートを指定し、その他のパラメータのデフォルト設定を維持して、[次へ] をクリックします。
パラメータ
有効な値
[イメージ名]
[イメージを選択] をクリックします。[イメージとイメージタグを選択] ダイアログボックスで、[アーティファクトセンター] タブをクリックし、
nginxを検索して、[openanolis/nginx] という名前のイメージリポジトリを選択します。次に、[イメージタグを選択] をクリックし、イメージタグを設定して、[OK] をクリックします。ポート
[名前]: nginx
[コンテナポート]: 80
[詳細設定] ウィザードページで、デフォルト設定を維持し、[作成] をクリックして NGINX アプリケーションを作成します。
kubectl の使用
my-nginx.yaml という名前のファイルを作成し、次の YAML コンテンツをファイルに追加します。
apiVersion: apps/v1 # 1.8.0 より前のバージョンでは 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 インスタンスを使用してアプリケーションを公開する
Container Service for Kubernetes (ACK) コンソールまたは kubectl を使用して、LoadBalancer サービスを作成できます。サービスが作成された後、サービスを使用してアプリケーションを公開します。
ACK コンソールの使用
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、目的のクラスタを見つけて、その名前をクリックします。左側のウィンドウで、 を選択します。
[サービス] ページで、[作成] をクリックし、[サービスの作成] ダイアログボックスでパラメータを設定します。
構成項目
説明
例
[名前]
サービスの名前。
my-nginx-svc
[サービス] [タイプ]
サービスの種類を指定します。さまざまな種類のソースからのアクセスを処理するために、次の種類のサービスを作成できます。
[SLB] を選択します。
[SLB タイプ] として [CLB] を選択します。[リソースを選択] の横にある [リソースの作成] を選択します。
必要に応じて、[CLB インスタンスの作成] ドロップダウンメニューの構成を変更します。[課金方法] を [従量課金 (CU 単位)] に設定します。
[外部トラフィックポリシー]
[外部トラフィックポリシー] パラメータは、[サービスの種類] パラメータを [ノードポート] または [サーバーロードバランサ] に設定した場合にのみ使用できます。外部トラフィックポリシーの詳細については、「はじめに」トピックの外部トラフィックポリシーの違いセクションをご参照ください。有効な値:
[ローカル]: 現在のノードのポッドにのみトラフィックをルーティングします。
[クラスタ]: クラスタ内の他のノードのポッドにトラフィックをルーティングします。
ローカル
[バックエンド]
サービスに関連付けるバックエンドアプリケーション。バックエンドアプリケーションを選択しないと、エンドポイントオブジェクトは作成されません。詳細については、セレクタのないサービスをご参照ください。
名前: app
値: nginx
[ポートマッピング]
サービスポートとコンテナポート。サービスポートは YAML ファイルの
portフィールドに対応し、コンテナポートは YAML ファイルのtargetPortフィールドに対応します。コンテナポートは、バックエンドポッドで公開されているポートと同じである必要があります。サービスポート: 80
コンテナポート: 80
プロトコル: TCP
[注釈]
SLB インスタンスの構成を変更するには、サービスに注釈を追加します。詳細については、注釈を使用して CLB インスタンスを構成するおよび 注釈を使用して NLB インスタンスを構成するをご参照ください。
重要クラスタ内の API サーバー の SLB インスタンスを再利用しないでください。再利用すると、クラスタアクセスエラーが発生する可能性があります。
この例では、サービスのパブリック帯域幅課金を最大帯域幅 2 Mbit/s の帯域幅課金に設定して、サービスを通過するトラフィック量を制限します。例:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type:paybybandwidthservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth:2
[ラベル]
サービスに追加されるラベル。サービスを識別します。
該当なし
[サービス削除保護]
誤って削除した場合のメンテナンスコストを回避するために、重要なビジネスまたは機密データに関連するサービスの削除保護を有効にします。この機能を有効にした後、リソースを削除する前に手動で無効にする必要があります。
説明コンテナセキュリティポリシーを管理するには、最初に policy-template-controller と gatekeeper をインストールする必要があります。クラスタの詳細ページで、 を選択します。これらのコンポーネントが表示されます。[インストール] をクリックして、これらのコンポーネントをデプロイします。
無効
パラメータを構成した後、[OK] をクリックします。
作成後、ターゲットサービスをクリックして詳細ページに移動します。[基本情報] セクションで、[外部 IP] の右側にある IP アドレス ([39.106.XX.XX:80] など) をクリックして、アプリケーションにアクセスします。

[kubectl] の使用
my-nginx-svc.yaml という名前のファイルを作成するために、サンプルサービスの次の YAML コンテンツを使用します。
selector を変更して、サンプルアプリケーションファイル my-nginx.yaml の matchLabels の値 (この例では
app: nginx) と一致させて、サービスをバックエンドアプリケーションに関連付けます。apiVersion: v1 kind: Service metadata: labels: app: nginx name: my-nginx-svc namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer次のコマンドを実行して、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> を上記で取得した EXTERNAL-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>Thank you for using nginx.
CLB
[CLB インスタンスの作成]
[CLB インスタンスの作成] を選択すると、CLB インスタンスのアクセスモードをパブリックアクセスまたは内部アクセスに設定し、CLB インスタンスの課金方法を Pay-by-specification または従量課金に設定できます。詳細については、「CLB インスタンスの作成と管理」をご参照ください。
パラメーター | 説明 |
名前 | CLB インスタンスの名前。このパラメーターは、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 インスタンスを作成する場合にのみ必須です。 |
[アクセス方法] | 有効な値:[パブリックアクセス] および [内部アクセス]。 |
[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 インスタンスを変更できます。
サービスを削除するか、その種類を LoadBalancer から変更すると、自動プロビジョニングされた SLB インスタンスは自動的に解放されます。保持するには、アノテーション service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-lb-on-delete を追加します。詳細については、「サービスの削除時に自動作成された SLB インスタンスを保持する」をご参照ください。このソリューションは、CLB インスタンスと NLB インスタンスの両方に適用されます。
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