cloud-controller-manager (CCM) コンポーネントは、LoadBalancer タイプの Service のロードバランサーを自動的に作成および管理します。ロードバランサーは、Classic Load Balancer (CLB) または Network Load Balancer (NLB) にすることができます。このトピックでは、Nginx アプリケーションを例として、ロードバランサーを自動的に作成する Service を使用してアプリケーションを公開する方法を説明します。
注
CCM は、タイプが
Type=LoadBalancerの Service に対してのみロードバランサーを構成します。CCM は、他の Service タイプに対してはロードバランサーを構成しません。CCM は宣言型 API を使用します。Service の構成に基づいて、ロードバランサーの構成を自動的にリフレッシュします。その結果、Server Load Balancer コンソールで変更した構成は上書きされる可能性があります。
重要Server Load Balancer コンソールで Kubernetes によって管理されているロードバランサーの構成を手動で変更しないでください。変更が上書きされ、Service にアクセスできなくなる可能性があります。
既存の LoadBalancer タイプの Service のロードバランサーを変更することはできません。別のロードバランサーを使用するには、新しい Service を作成する必要があります。
Service のタイプを Type=LoadBalancer から Type!=LoadBalancer に変更すると、CCM はロードバランサーの構成を削除します。これにより、ロードバランサーを介して Service にアクセスできなくなります。
クォータ制限
CCM は、タイプが
Type=LoadBalancerの Service のロードバランサーを作成します。デフォルトでは、最大 60 個のインスタンスを持つことができます。60 個を超えるインスタンスが必要な場合は、Quota Centerコンソールにログインしてアプリケーションを送信。CCM は、Service で定義されたポートに基づいてリスナーを作成します。デフォルトでは、ロードバランサーインスタンスに最大 50 個のリスナーを追加できます。さらにリスナーを追加するには、Quota Centerコンソールにログインしてアプリケーションを送信。
ロードバランサーの制限の詳細については、「制限」をご参照ください。
ロードバランサーのクォータを照会するには、「ロードバランサーのクォータ管理」をご参照ください。
ステップ 1: サンプルアプリケーションをデプロイする
kubectl コマンドラインからアプリケーションをデプロイできます。
サンプルアプリケーション用に、次の YAML コンテンツを含む my-nginx.yaml という名前のファイルを作成します。
apiVersion: apps/v1 # 1.8.0 より前のバージョンの場合は apps/v1beta1 を使用します kind: Deployment metadata: name: my-nginx # サンプルアプリケーションの名前。 labels: app: nginx spec: replicas: 3 # レプリカ数。 selector: matchLabels: app: nginx # このアプリケーションを公開する Service のセレクターと一致する必要があります。 template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest # これを実際のイメージアドレスに置き換えます。フォーマットは <image_name:tags> です。 ports: - containerPort: 80 # このポートは Service で公開する必要があります。my-nginx サンプルアプリケーションをデプロイします。
kubectl apply -f my-nginx.yamlサンプルアプリケーションが Normal 状態であることを確認します。
kubectl get deployment my-nginx出力例:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 3/3 3 3 50s
ステップ 2: ロードバランサーを自動的に作成するサービスを使用してアプリケーションを公開する
コンソールまたは kubectl を使用して LoadBalancer タイプの Service を作成し、アプリケーションを公開できます。
コンソールを使用する
ACS コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけてその ID をクリックします。クラスター詳細ページの左側のナビゲーションウィンドウで、[ネットワーク] > [サービス] を選択します。
[サービス] ページで、左上隅にある [作成] をクリックします。
[サービスの作成] ダイアログボックスで、Service のパラメーターを設定します。
パラメーター
説明
例
サービス名
Service の名前。
my-nginx-svc
サービスタイプ
Service タイプを選択します。Service ネットワークは、さまざまなタイプのクライアントとアクセスソースに対して次のモードをサポートします:
外部トラフィックポリシー
[外部トラフィックポリシー] は、サービスタイプが [ノードポート] または [Server Load Balancer] の場合にのみ設定できます。
[ローカル]: 現在のノードの Pod にのみトラフィックをルーティングします。
[クラスター]: クラスター内の他のノードの Pod にトラフィックを転送します。
ローカル
サービス関連付け
Service に関連付けるバックエンドアプリケーション。バックエンドアプリケーションを選択しない場合、Endpoint オブジェクトは作成されません。詳細については、「セレクターなしのサービス」をご参照ください。
名前: app
値: nginx
ポートマッピング
Service ポートとコンテナーポート。Service ポートは YAML ファイルの
portフィールドに対応し、コンテナーポートは YAML ファイルのtargetPortフィールドに対応します。コンテナーポートは、バックエンド Pod で公開されているポートと同じである必要があります。80
アノテーション
サービスにアノテーションを追加して、ロードバランサーのパラメーターを構成します。詳細については、「アノテーションを使用した CLB インスタンスの構成」をご参照ください。
重要クラスターの API Server の SLB インスタンスを再利用しないでください。再利用すると、クラスターへのアクセスが異常になる可能性があります。
この例では、サービスの課金方法は帯域幅課金に設定され、帯域幅のピークはサービス トラフィックを制御するために 2 Mbit/s に設定されています。アノテーションは次のとおりです:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type:paybybandwidthservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth:2
ラベル
Service に追加するラベル。Service を識別します。
なし
kubectl を使用する
Service 用に、次の内容で my-nginx-svc.yaml という名前のファイルを作成します。
selectorフィールドの値 (この例ではapp: nginx) が、バックエンドアプリケーションのデプロイメントのmatchLabelsフィールドの値と一致していることを確認してください。これにより、Service がバックエンドアプリケーションに関連付けられます。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 という名前の Service を作成し、それを使用してアプリケーションを公開します。
kubectl apply -f my-nginx-svc.yaml次のコマンドを実行して、LoadBalancer Service が作成されたことを確認します。
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/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>Thank you for using nginx.