クラスターの外部からServer Load Balancer (SLB) インスタンスによって公開されるサービスにアクセスするには、SLBインスタンスのドメイン名または <IP:Service port>
エンドポイントを使用します。 クラスター内からサービスにアクセスするには、<サービス名: サービスポート>
エンドポイントを使用します。 このトピックでは、NGINXアプリケーションを例として、既存のSLBインスタンスを使用してアプリケーションを公開するLoadBalancerサービスを使用する方法について説明します。
前提条件
Container Service for Kubernetes (ACK) クラスターまたはACKサーバーレスクラスターが作成されました。 詳細については、「ACKマネージドクラスターの作成」、「ACK専用クラスターの作成」、および「ACKサーバーレスクラスターの作成」をご参照ください。
重要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インスタンスのリスニングルールを手動で設定できます。v1.9.3.59より前のcloud-controller-manager -ge3bc999-aliyun: 既存のSLBインスタンスを指定すると、cloud-controller-managerはSLBインスタンスのバックエンドサーバーグループを自動的に作成し、これらのバックエンドサーバーグループを管理します。 また、リスナーが手動で設定されている場合でも、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インスタンスを使用してアプリケーションを公開するLoadBalancerサービスを作成する
ACKコンソールまたはkubectlを使用してLoadBalancerサービスを作成し、アプリケーションを公開できます。
ACKコンソールの使用
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、
を選択します。[サービス] ページで、[作成] をクリックします。 [サービスの作成] ダイアログボックスで、必要なパラメーターを設定します。
パラメーター
説明
例
名前
サービスの名前。
my-nginx-svc
サービスタイプ
[サービスタイプ] を指定します。 さまざまな種類のソースからのアクセスを処理するために、次の種類のサービスを作成できます。
[SLB] を選択します。
[既存のリソースを使用] をクリックし、ドロップダウンリストからCLBインスタンスを選択します。
この例のCLBインスタンスは新しく作成されます。 CLBインスタンスのリスナーを設定する必要があります。 したがって、[既存のリスナーの上書き] を選択します。
外部トラフィックポリシー
[外部トラフィックポリシー] パラメーターは、サービスタイプパラメーターを [ノードポート] または [Server Load Balancer] に設定した場合にのみ使用できます。 外部トラフィックポリシーの詳細については、「はじめに」トピックの外部トラフィックポリシーの違いをご参照ください。 有効な値:
Local: 現在のノードのポッドにのみトラフィックをルーティングします。
Cluster: トラフィックをクラスター内の他のノードのポッドにルーティングします。
Local
バックエンド
サービスに関連付けるバックエンドアプリケーション。 バックエンドアプリケーションを選択しない場合、Endpointオブジェクトは作成されません。 詳細については、「Services-without-selectors」をご参照ください。
名前: app。
値: 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.
[サービス] ページで、サービスの名前をクリックして詳細ページに移動します。 [基本情報] セクションで、サービスの [外部エンドポイント] (39.106.XX.XX:80など) をクリックして、アプリケーションにアクセスします。
kubectlを使う
サービスを作成します。
という名前のファイルを作成します。my-nginx-svc.yaml次の内容をファイルに追加します。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id
の ${YOUR_LB_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ファイルのmatchLabelsの値 (
app: nginx
) にセレクターを設定します。 これにより、サービスはバックエンドポッドに関連付けられます。
apiVersion: v1 kind: Service # Define a Service. metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${YOUR_LB_ID} service.beta.kubernetes.io/alicloud-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
パラメーター
説明
種類
リソースオブジェクトがサービスであることを指定します。
メタデータ
名前、ラベル、名前空間など、サービスに関する基本情報を定義します。
metadata.annotations
LoadBalancerアノテーションを追加できます。 この例では、アノテーション
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type
がintranet
に設定されています。 詳細については、「アノテーションを使用したCLBインスタンスの設定」をご参照ください。spec.selector
サービスのラベルセレクターを定義します。 サービスは、ラベルがラベルセレクターと一致するポッドを公開します。
spec.ports.port
クラスターIPアドレスで公開されるサービスポートを指定します。
clusterIP:port
にリクエストを送信することで、クラスター内からサービスにアクセスできます。spec.ports.tar getPort
トラフィックを受信するバックエンドポッドのポートを指定します。 Service
ポート
を介して流れるトラフィックは、kube-proxyによってバックエンドポッドのポート (targetPort
で指定) に転送され、コンテナーに到達します。spec.type
サービスへのアクセス方法を定義します。
LoadBalancer
: サービスはSLBインスタンスを使用して公開されます。 サービスにSLBインスタンスが指定されていない場合、デフォルトでインターネットに接続されたSLBインスタンスが作成されます。 アノテーションをイントラネット
に設定して、内部対応のSLBインスタンスを作成し、サービスを内部アクセスに公開することができ。 詳細については、「注釈を使用してCLBインスタンスを構成する」および「注釈を使用してNLBインスタンスを構成する」をご参照ください。ClusterIP
: クラスター内のサービスを公開します。 ClusterIPサービスは、クラスター内からアクセスできます。NodePort
: ノードポートをバックエンドサービスにマップします。NodeIP:NodePort
にリクエストを送信することで、クラスターの外部からサービスにアクセスできます。ExternalName
: サービスをDNSサーバーにマップします。
次のコマンドを実行して、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 that you obtained in the preceding step.
期待される出力:
<!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