Server Load Balancer (SLB) インスタンスが使用できない場合、cloud-controller-manager (CCM) コンポーネントは、LoadBalancer Service用の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は、サービス設定に基づいて、ECS (Elastic Compute Service) インスタンスをSLBインスタンスのバックエンドサーバーグループに自動的に追加します。
デフォルトでは、1つのECSインスタンスを最大50のバックエンドサーバーグループに追加できます。 ECSインスタンスをより多くのバックエンドサーバーグループに追加するには、Quota Centerコンソールにログインしてアプリケーションを送信でクォータの増加を申請します。
デフォルトでは、最大200台のバックエンドサーバーをSLBインスタンスに追加できます。 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 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: my-nginx # The name of the sample application. labels: app: nginx spec: replicas: 2 # The number of replicated pods. selector: matchLabels: app: nginx # You must specify the same value in the selector of the Service that is used to expose the application. 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 # The port that you want to expose in the Service.
次のコマンドを実行して、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コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[サービス] ページで、[作成] をクリックし、[サービスの作成] ダイアログボックスでパラメーターを設定します。
設定アイテム
説明
例
名前
サービスの名前。
my-nginx-svc
サービスタイプ
[サービスタイプ] を指定します。 さまざまな種類のソースからのアクセスを処理するために、次の種類のサービスを作成できます。
[SLB] を選択します。
[既存のリソースを使用] をクリックし、ドロップダウンリストからCLBインスタンスを選択します。
この例のCLBインスタンスは新しく作成されます。 CLBインスタンスのリスナーを設定する必要があります。 したがって、[既存のリスナーの上書き] を選択します。
外部トラフィックポリシー
[外部トラフィックポリシー] パラメーターは、サービスタイプパラメーターを [ノードポート] または [Server Load Balancer] に設定した場合にのみ使用できます。 外部トラフィックポリシーの詳細については、「はじめに」トピックの外部トラフィックポリシーの違いをご参照ください。 有効な値:
Local: 現在のノードのポッドにのみトラフィックをルーティングします。
Cluster: トラフィックをクラスター内の他のノードのポッドにルーティングします。
Local
バックエンド
サービスに関連付けるバックエンドアプリケーション。 バックエンドアプリケーションを選択しない場合、Endpointオブジェクトは作成されません。 詳細については、「Services-without-selectors」をご参照ください。
名前: アプリ
値: my-nginx
ポートマッピング
サービスポートとコンテナーポート。 サービスポートはYAMLファイルの
port
フィールドに対応し、コンテナーポートはYAMLファイルのtargetPort
フィールドに対応します。 コンテナーポートは、バックエンドポッドで公開されているポートと同じである必要があります。80
注釈
注釈をサービスに追加して、SLBインスタンスの構成を変更します。 詳細については、「注釈を使用してCLBインスタンスを構成する」および「注釈を使用してNLBインスタンスを構成する」をご参照ください。
重要クラスター内のAPIサーバーのSLBインスタンスを再利用しないでください。 そうしないと、クラスタアクセス障害が発生する可能性があります。
この例では、2つの注釈を追加して、帯域幅課金方法を指定し、最大帯域幅を2 Mbit/sに設定して、サービスを介して流れるトラフィックの量を制限します。 例:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type:paybybandwidth
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth:2
ラベル
サービスを識別する、サービスに追加されるラベル。
非該当
サービス削除保護
重要なビジネスまたは機密データを含むサービスの削除保護を有効にして、誤った削除に関連するメンテナンスコストを回避します。 この機能を有効にすると、この機能を手動で無効にした後にのみリソースを削除できます。
説明コンテナーセキュリティポリシーを管理するには、まずpolicy-template-controllerとgatekeeperをインストールする必要があります。 クラスターの詳細ページで、 を選択すると、これらのコンポーネントが表示されます。 [インストール] をクリックして、これらのコンポーネントのデプロイを完了します。
無効
パラメーターを設定したら、[OK] をクリックします。
[サービス] ページで、作成したサービスをクリックして、サービスの詳細ページに移動します。 [基本情報] セクションで、[外部IP] の右側にある [39.106.XX.XX:80] をクリックしてアプリケーションにアクセスします。
kubectl操作ガイド
という名前のファイルを作成するには、サンプルサービスの次のYAMLコンテンツを使用します。my-nginx-svc.yaml.
セレクターを変更して、サンプルアプリケーションファイルmy-nginx.yaml (この例では
app: nginx
) のmatchLabelsの値と一致させ、サービスをバックエンドアプリケーションに関連付けます。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> # Replace <YOUR-External-IP> with the EXTERNAL-IP address obtained above.
期待される出力:
<!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インスタンスを作成する場合にのみ必要です。 |
アクセス方法 | 有効な値: パブリックアクセスおよび内部アクセス。 |
課金方法 | 有効な値: Pay-by-specificationおよびPay-as-you-go (Pay-by-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インスタンスを作成する場合にのみ必要です。 |
アクセス方法 | 有効な値: パブリックアクセスおよび内部アクセス。 |
課金方法 | 有効値: 従量課金 (Pay-by-CU) 。 詳細は、「NLB課金」をご参照ください。 |
IPバージョン | IPアドレスのバージョン。 有効な値: IPv4およびDual-stack。 |
スケジューリングアルゴリズム | 有効な値:
|
ヘルスチェック | ヘルスチェック機能を有効にするかどうかを指定します。
|
その他 | アノテーションを使用してNLBインスタンスを設定することもできます。 詳細については、「アノテーションを使用したNLBインスタンスの設定」をご参照ください。 |
[VPC] | デフォルトのクラスターVPCリージョンとVPC ID。 |
Vswitch | VPCのインスタンスでサポートされているゾーンでvSwitchを選択するか、新しいvSwitchを作成できます。 |
既存のNLBインスタンスの使用
[既存のNLBインスタンスを使用] を選択した場合、[既存のNLBインスタンスを使用] のドロップダウンリストから既存のNLBインスタンスを選択できます。 既存のリスナーの上書きを有効にするかどうかも選択できます。 詳細については、「既存のNLBインスタンスの使用」をご参照ください。
既存のNLBインスタンスを使用する場合は、いくつかの制限と使用状況の注意を払う必要があります。 詳細については、「LoadBalancerサービスを設定するための考慮事項」トピックの使用方法の注意事項をご参照ください。
詳細設定
パラメーター | 説明 |
スケジューリングアルゴリズム | 有効な値:
|
ヘルスチェック | ヘルスチェック機能を有効にするかどうかを指定します。
|
その他 | アノテーションを使用してNLBインスタンスを設定することもできます。 詳細については、「アノテーションを使用したNLBインスタンスの設定」をご参照ください。 |
[VPC] | デフォルトのクラスターVPCリージョンとVPC ID。 |
Vswitch | VPCのインスタンスでサポートされているゾーンでvSwitchを選択するか、新しい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