既存の CLB または NLB を LoadBalancer Service にアタッチすることで、固定 IP を維持したり、複数の Service 間で共有したりできます。
クラスターの外部からは <SLB-IP>:<Service port> または SLB ドメイン名を使用します。クラスターの内部からは <Service name>:<Service port> を使用します。
前提条件
次のことを確認してください。
-
Container Service for Kubernetes (ACK) マネージドクラスター、ACK 専用クラスター、または ACK サーバーレスクラスターが作成されていること。詳細については、「ACK マネージドクラスターの作成」、「ACK 専用クラスターの作成 (提供終了)」、および「ACK サーバーレスクラスターの作成」をご参照ください。
-
クラスターと同じリージョンに、SLB コンソールで CLB または NLB インスタンスが作成されていること。詳細については、「 既存の CLB インスタンスの使用 」および「 既存の NLB インスタンスの使用 」をご参照ください。
既存の Server Load Balancer (SLB) インスタンスを再利用する予定がある場合は、クラスター作成時に [Ingress のインストール] を選択しないでください。後から手動でインスタンスを指定します。詳細については、「既存の CLB インスタンスの使用」および「既存の NLB インスタンスの使用」をご参照ください。
注意事項
リスナーの管理は cloud-controller-manager のバージョンに依存し、一部の SLB インスタンスは再利用できません。
cloud-controller-manager のバージョンごとのリスナーの動作
リスナーの設定は、cloud-controller-manager のバージョンに依存します。
-
v1.9.3.59-ge3bc999-aliyun 以降: デフォルトでは、cloud-controller-manager はリスナーを設定しません。ACK にリスナーを管理させるには
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"を追加するか、手動で設定します。 -
v1.9.3.59-ge3bc999-aliyun より前: cloud-controller-manager はバックエンドサーバーグループを作成・管理し、手動で設定したものを含むすべてのリスナーをそれらのグループに関連付けます。
cloud-controller-manager のバージョンの確認
-
コンソール: ACK コンソールで、クラスターの [運用] > [アドオン] ページに移動します。[コアコンポーネント] タブで、[Cloud Controller Manager] のバージョンを確認します。
-
kubectl (ACK 専用クラスターのみ) :
kubectl get pod -n kube-system -o yaml | grep image: | grep cloud-con | uniq
利用制限
-
クラスターの API サーバーの SLB インスタンスを再利用しないでください。アクセス障害の原因となります。
-
先に進む前に、「再利用可能な SLB インスタンス」および「クォータ制限」を確認してください。
アプリケーションのデプロイ
LoadBalancer Service のバックエンドとして、ステートレスな NGINX アプリケーションをデプロイします。
ACK コンソールの使用
-
ACK コンソールにログインします。左側メニューで、[クラスター] をクリックします。
-
[クラスター] ページで、クラスター名をクリックします。左側メニューで、[ワークロード] > [Deployment] を選択します。
-
[Deployment] ページで、[イメージから作成] をクリックし、Deployment を設定します。
-
[基本情報] ページで、[名前] を
my-nginxに設定し、[次へ] をクリックします。 -
[コンテナ] ページで、イメージとポートを設定します。
パラメーター
値
[イメージ名]
[イメージの選択] をクリックします。[Artifact Center] タブで
nginxを検索し、[openanolis/nginx] を選択します。[イメージタグの選択] をクリックし、タグを設定して [OK] をクリックします。[ポート]
名前:
nginx、コンテナポート:80 -
[詳細設定] ページで、デフォルト設定を維持し、[作成] をクリックします。
-
kubectl の使用
-
次の内容の
my-nginx.yamlという名前のファイルを作成します。apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx # Deployment 名 labels: app: nginx spec: replicas: 2 # Pod レプリカの数 selector: matchLabels: app: nginx # Service のセレクターと一致させる必要があります 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 -
アプリケーションをデプロイします。
kubectl apply -f my-nginx.yaml -
Deployment の準備ができていることを確認します。
kubectl get deployment my-nginx期待される出力:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 2/2 2 2 50s
LoadBalancer Service の作成
既存の SLB インスタンスに Service を関連付け、外部トラフィックを NGINX Pod にルーティングします。
ACK コンソールの使用
-
ACK コンソールにログインします。左側メニューで、[クラスター] をクリックします。
-
[クラスター] ページで、クラスター名をクリックします。左側メニューで、[ネットワーク] > [Service] を選択します。
-
[Service] ページで、[作成] をクリックします。[Service の作成] ダイアログボックスで、次のパラメーターを設定します。
パラメーター
説明
例
[名前]
Service の名前
my-nginx-svc[Service タイプ]
[SLB] を選択し、[SLB タイプ] を [CLB] に設定し、[既存リソースの使用] を選択します。CLB インスタンスを選択します。リスナーのないインスタンスの場合は、[既存リスナーの上書き] を有効にします。
SLB > CLB > 既存リソースの使用
[外部トラフィックポリシー]
[Local] は、現在のノード上の Pod にのみトラフィックをルーティングします。[Cluster] は、すべてのノードの Pod にトラフィックをルーティングします。
Local[バックエンド]
Service に関連付けるアプリケーション
名前:
app、値:nginx[ポートマッピング]
Service ポートをコンテナポートにマッピングします
Service ポート:
80、コンテナポート:80、プロトコル:TCP[アノテーション]
アノテーションを追加して SLB インスタンスを設定します。詳細については、「アノテーションを使用した CLB インスタンスの設定」および「アノテーションを使用した NLB インスタンスの設定」をご参照ください。
N/A
-
[OK] をクリックします。Service 名をクリックして詳細を表示し、[外部 IP] (例:
39.106.XX.XX:80) をクリックしてアクセスを確認します。
kubectl の使用
-
次の内容の
my-nginx-svc.yamlという名前のファイルを作成します。フィールド
説明
metadata.annotationsalibaba-cloud-loadbalancer-id:既存の SLB インスタンスの ID。alibaba-cloud-loadbalancer-force-override-listeners: 'true':ACK がリスナーを管理できるようにします。既存のリスナー設定を維持する場合は、このアノテーションを省略します。spec.selectorトラフィックを受信する Pod を選択します。Deployment の
matchLabels(app: nginx) と一致する必要があります。spec.ports.portクラスター IP で公開されるポート。クラスター内からは
clusterIP:portでアクセスします。spec.ports.targetPortバックエンド Pod のポート。kube-proxy はトラフィックを
portからtargetPortに転送します。apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${YOUR_LB_ID} # お使いの SLB インスタンス ID に置き換えます service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: 'true' # リスナーが設定されていない新しいインスタンスの場合は true に設定します labels: app: nginx name: my-nginx-svc namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx # バックエンド Pod のラベルと一致させる必要があります type: LoadBalancer主要なフィールド:
-
Service を適用します。
kubectl apply -f my-nginx-svc.yaml -
Service に外部 IP があることを確認します。
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> # 前のステップで取得した外部 IP に置き換えます期待される出力:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> ... </html>
Service の管理
ACK コンソールの使用
-
ACK コンソールにログインします。左側メニューで、[クラスター] をクリックします。
-
[クラスター] ページで、クラスター名をクリックします。左側メニューで、[ネットワーク] > [Service] を選択します。
-
[Service] ページで、Service 名をクリックして詳細を表示するか、[操作] 列の [更新] または [削除] をクリックします。
kubectl の使用
Service の更新
kubectl edit service my-nginx-svc
または、my-nginx-svc.yaml を編集して再適用します。
kubectl apply -f my-nginx-svc.yaml
Service の表示
kubectl get service my-nginx-svc
期待される出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-nginx-svc LoadBalancer 172.21.XX.XX 39.106.XX.XX 80:31599/TCP 5m
Service の削除
kubectl delete service my-nginx-svc
CLB 設定リファレンス
ACK コンソールで CLB インスタンスを作成または再利用する際に、これらのパラメーターを設定します。
新しい CLB インスタンスの作成
|
パラメーター |
説明 |
|
[名前] |
CLB インスタンスの名前 |
|
[アクセスモード] |
[パブリックアクセス] または [内部アクセス] |
|
[課金方法] |
[仕様別の支払い] または [従量課金 (CU 単位)]。詳細については、「CLB の課金」をご参照ください。 |
|
[IP バージョン] |
[IPv4] または [IPv6] |
|
[スケジューリングアルゴリズム] |
[ラウンドロビン (RR)] (デフォルト) :リクエストを順番に分散します。[加重ラウンドロビン (WRR)] :重みが大きいサーバーがより多くのリクエストを受信します。 |
|
[アクセス制御] |
リスナーレベルのアクセス制御を有効または無効にします。詳細については、「アクセス制御」をご参照ください。 |
|
[ヘルスチェック] |
TCP または HTTP。詳細については、「CLB のヘルスチェック」をご参照ください。 |
|
[その他] |
アノテーションで設定します。詳細については、「アノテーションを使用した CLB インスタンスの設定」をご参照ください。 |
既存の CLB インスタンスの使用
インスタンスを選択し、必要に応じて [既存リスナーの上書き] を有効にします。詳細については、「既存の CLB インスタンスを使用して、そのリスナーを強制的に上書きする」をご参照ください。
CLB を再利用する前に、利用制限を確認してください。詳細については、「LoadBalancer Service の設定に関する考慮事項」の「利用上の注意」をご参照ください。
詳細設定
|
パラメーター |
説明 |
|
[スケジューリングアルゴリズム] |
[ラウンドロビン (RR)] (デフォルト) または [加重ラウンドロビン (WRR)] |
|
[アクセス制御] |
リスナーのアクセス制御を有効または無効にします |
|
[ヘルスチェック] |
TCP または HTTP。詳細については、「CLB のヘルスチェック」をご参照ください。 |
|
[その他] |
アノテーションで設定します。詳細については、「アノテーションを使用した CLB インスタンスの設定」をご参照ください。 |
NLB 設定リファレンス
ACK コンソールで NLB インスタンスを作成または再利用する際に、これらのパラメーターを設定します。
新しい NLB インスタンスの作成
|
パラメーター |
説明 |
|
[名前] |
NLB インスタンスの名前 |
|
[アクセスモード] |
[パブリックアクセス] または [内部アクセス] |
|
[課金方法] |
[従量課金 (CU 単位)]。詳細については、「NLB の課金」をご参照ください。 |
|
[IP バージョン] |
[IPv4] または [デュアルスタック] |
|
[スケジューリングアルゴリズム] |
[ラウンドロビン] :順番に分散します。[加重ラウンドロビン] (デフォルト) :重みが大きいサーバーがより多くのリクエストを受信します。[送信元 IP ハッシュ] :同じ送信元 IP が同じサーバーにルーティングされます。[4 タプルハッシュ] :送信元 IP、宛先 IP、送信元ポート、宛先ポートによってルーティングします。[QUIC ID ハッシュ] :同じ QUIC ID が同じサーバーにルーティングされます。[加重最小接続] :重みと接続数によってルーティングします。 |
|
[ヘルスチェック] |
[TCP] (デフォルト) : SYN プローブ。[ヘルスチェック応答タイムアウト]、[ヘルスチェック間隔]、[正常しきい値]、および [異常しきい値] を設定します。[HTTP] : HEAD/GET プローブ。[ドメイン名] (バックエンドサーバーの内部 IP またはカスタムドメイン名)、[パス]、および [ヘルスチェックステータスコード] (http_2xx、http_3xx、http_4xx、http_5xx、デフォルト : http_2xx) を設定します。 |
|
[VPC] |
クラスターの VPC リージョンと VPC ID |
|
[Vswitch] |
サポートされているゾーンにある vSwitch を選択するか、新規作成します |
|
[その他] |
アノテーションで設定します。詳細については、「アノテーションを使用した NLB インスタンスの設定」をご参照ください。 |
既存の NLB インスタンスの使用
インスタンスを選択し、必要に応じて [既存リスナーの上書き] を有効にします。詳細については、「既存の NLB インスタンスの使用」をご参照ください。
NLB を再利用する前に、利用制限を確認してください。詳細については、「LoadBalancer Service の設定に関する考慮事項」の「利用上の注意」をご参照ください。
詳細設定
|
パラメーター |
説明 |
|
[スケジューリングアルゴリズム] |
上記の「新しい NLB インスタンスの作成」の表と同じオプションです |
|
[ヘルスチェック] |
上記の「新しい NLB インスタンスの作成」の表と同じオプションです |
|
[VPC] |
クラスターの VPC リージョンと VPC ID |
|
[Vswitch] |
サポートされているゾーンにある vSwitch を選択するか、新規作成します |
|
[その他] |
アノテーションで設定します。詳細については、「アノテーションを使用した NLB インスタンスの設定」をご参照ください。 |
次のステップ
-
既存の SLB インスタンスを再利用する代わりに、ACK に SLB インスタンスを自動的に作成・管理させるには、「自動作成された SLB インスタンスを使用したアプリケーションの公開」をご参照ください。
-
アノテーションが有効にならない場合や、Service が SLB インスタンスにアタッチできない場合は、「Service に関する FAQ」および「Service のトラブルシューティング」をご参照ください。