サーバーロードバランサー (SLB) インスタンスが使用できない場合、cloud-controller-manager (CCM) コンポーネントは、LoadBalancerサービス用にクラシックロードバランサー (CLB) またはネットワークロードバランサー (NLB) インスタンスを自動的に作成および管理します。このトピックでは、自動的に作成された SLB インスタンスを使用してアプリケーションを公開する方法について説明します。このトピックでは、NGINX アプリケーションを使用します。
注意事項
CCM は、
Type=LoadBalancer
設定を持つサービスに対してのみ SLB リソースを作成および構成します。CCM は宣言型 API を使用し、特定の条件が満たされた場合、公開されたサービスの構成に合わせて SLB インスタンスの構成を自動的に更新します。SLB コンソールで変更した SLB 構成は、CCM によって上書きされる可能性があります。
重要SLB コンソールで、Kubernetes によって作成および管理されている SLB インスタンスの構成を変更しないでください。変更すると、Kubernetes が変更を上書きし、結果として関連する LoadBalancer サービスにアクセスできなくなる可能性があります。
サービスの作成後、LoadBalancer サービスに関連付けられている SLB インスタンスを変更することはできません。SLB インスタンスを変更するには、新しいサービスを作成する必要があります。
サービスの設定を Type=LoadBalancer
から Type!=LoadBalancer
に変更すると、CCM はそのサービス用に作成された SLB インスタンスの構成を削除します。その結果、SLB インスタンスを使用してサービスにアクセスできなくなります。
クォータ
CCM は、
Type=LoadBalancer
設定を持つサービスに対して SLB インスタンスを作成します。デフォルトでは、Alibaba Cloud アカウント内に最大 60 個の SLB インスタンスを持つことができます。さらに SLB インスタンスを作成するには、Quota Centerコンソールにログインしてアプリケーションを送信して、クォータの増加を申請してください。CCM は、サービスポートを使用するリスナーを SLB インスタンスに対して自動的に作成します。デフォルトでは、各 SLB インスタンスは最大 50 個のリスナーをサポートします。各 SLB インスタンスでサポートされるリスナーの数を増やすには、Quota Centerコンソールにログインしてアプリケーションを送信して、クォータの増加を申請してください。
SLB の制限の詳細については、制限 を参照してください。
SLB リソースクォータを照会するには、SLB コンソールのクォータセンターページにアクセスしてください。
手順 1: アプリケーションをデプロイする
次のセクションでは、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: 3 # レプリケートされたポッドの数。 selector: matchLabels: app: nginx # アプリケーションを公開するために使用されるサービスのセレクターに同じ値を指定する必要があります。 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 # サービスで公開するポート。
次のコマンドを実行して、my-nginx アプリケーションをデプロイします。
kubectl apply -f my-nginx.yaml
次のコマンドを実行して、アプリケーションのステータスを照会します。
kubectl get deployment my-nginx
予想される出力:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 3/3 3 3 50s
手順 2: 自動的に作成された SLB インスタンスを使用してアプリケーションを公開する
ACS コンソールまたは kubectl を使用して LoadBalancer サービスを作成できます。サービスが作成された後、サービスを使用してアプリケーションを公開できます。
ACS コンソールの使用
ACS コンソールにログインします。左側のナビゲーションペインで、クラスターをクリックします。
クラスターページで、管理するクラスターを見つけ、その ID をクリックします。クラスター詳細ページの左側のナビゲーションペインで、ネットワーク > サービスを選択します。
サービスページで、左上の作成をクリックします。
サービスの作成ダイアログボックスで、パラメーターを構成します。
パラメーター
説明
例
名前
サービスの名前。
my-nginx-svc
サービスタイプ
サービスのタイプ。このパラメーターは、サービスへのアクセス方法を指定します。サーバーロードバランサーを選択します。次に、パブリックアクセスとSLB インスタンスの作成を選択します。変更をクリックして、ビジネス要件に基づいて SLB インスタンスの仕様を変更できます。この例では、デフォルトの仕様が使用されます。
slb.s1.small
外部トラフィックポリシー
外部トラフィックポリシーパラメーターは、ノードポートまたはサーバーロードバランサーにサービスタイプパラメーターを設定した場合にのみ使用できます。
ローカル: 現在のノードのポッドへのみトラフィックをルーティングします。
クラスター: クラスター内の他のノードのポッドにトラフィックをルーティングします。
ローカル
バックエンド
サービスに関連付けるバックエンドアプリケーション。バックエンドアプリケーションを選択しないと、エンドポイントオブジェクトは作成されません。詳細については、セレクターなしのサービスを参照してください。
名前: app。
値: my-nginx。
ポートマッピング
サービスポートとコンテナポート。サービスポートは YAML ファイルの
port
フィールドに対応し、コンテナポートは YAML ファイルのtargetPort
フィールドに対応します。コンテナポートは、バックエンドポッドで公開されているポートと同じである必要があります。80
アノテーション
SLB インスタンスを構成するためにサービスに追加されるアノテーション。詳細については、サービスの YAML ファイルにアノテーションを追加して CLB インスタンスを構成するを参照してください。
重要クラスター内の API サーバー の SLB インスタンスを再利用しないでください。再利用すると、クラスターアクセスエラーが発生する可能性があります。
この例では、帯域幅課金方式を指定し、最大帯域幅を 2 Mbit/s に設定して、サービスを通過するトラフィック量を制限するために、2 つのアノテーションが追加されています。例:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type:paybybandwidth
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth:2
ラベル
サービスに追加されるラベル。サービスを識別します。
なし
kubectl の使用
my-nginx-svc.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/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>