Network Load Balancer (NLB) で Service を使用する場合、YAML ファイルのアノテーションを使用して、NLB ネットワークタイプの指定、設定変更保護の有効化、相互認証の設定などの追加のロードバランシング機能を有効にできます。このトピックでは、Service の YAML ファイルでアノテーションを使用して実行できる一般的な NLB 設定について説明します。設定は、NLB インスタンス、リスナー、サーバーグループのリソースごとに分類されています。
インデックス
カテゴリ | 機能カテゴリ | 設定リンク |
ロードバランサーの作成 | ||
インスタンス設定 | ||
セキュリティ設定 | ||
リスナーの作成 | ||
リスナー設定 | ||
セキュリティ設定 | ||
サーバー設定 | ||
注意事項
Container Service for Kubernetes (ACK) クラスターはバージョン 1.24 以降、Cloud Controller Manager (CCM) コンポーネントはバージョン 2.5.0 以降である必要があります。クラスターのアップグレード方法の詳細については、「クラスターの手動アップグレード」をご参照ください。コンポーネントのアップグレード方法の詳細については、「コンポーネントの管理」をご参照ください。
Service の定義で、
spec.loadBalancerClassをalibabacloud.com/nlbに設定します。このフィールドを指定しない場合、デフォルトで Classic Load Balancer (CLB) が作成されます。Service の作成後は、
spec.loadBalancerClassを変更できません。つまり、ロードバランサーのタイプを CLB と NLB の間で変更することはできません。ACK コンソールでは NLB を管理できません。
kubectlコマンドを使用する必要があります。
NLB の一般的な操作
インターネット向け NLB の作成
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps
説明 | サポートされる CCM バージョン |
NLB のゾーン、プライベート IP アドレス、および EIP を指定します。フォーマットは次のとおりです。 NLB のゾーン、プライベート IP アドレス、および Elastic IP (EIP) を指定します。フォーマットは
| ゾーンと vSwitch ID:v2.5.0 以降 プライベート IP アドレスと EIP:v2.12.1 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer内部 NLB の作成
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type
説明 | サポートされる CCM バージョン |
NLB が内部向けであることを指定します。このアノテーションの値を変更することで、インターネット向け NLB と内部 NLB を切り替えることができます。有効値:
デフォルト値: NLB がサポートするリージョンとゾーンは、NLB コンソールで確認できます。少なくとも 2 つのゾーンが必要です。複数のゾーンはカンマで区切ります。例: | v2.5.0 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerロードバランサーのプライベート IP アドレスの指定
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps
説明 | サポートされる CCM バージョン |
NLB のゾーン、プライベート IP アドレス、および EIP を指定します。フォーマットは次のとおりです。
|
|
apiVersion: v1
kind: Service
metadata:
annotations:
# 例:cn-hangzhou-k:vsw-i123456:10.1.0.1,cn-hangzhou-j:vsw-j654321:10.2.0.1
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A}:${private-ipv4-A},${zone-B}:${vsw-B}:${private-ipv4-B}"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerロードバランサーの EIP インスタンス ID の指定
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps
説明 | サポートされる CCM バージョン |
NLB のゾーン、プライベート IP アドレス、および EIP を指定します。フォーマットは次のとおりです。
| ゾーンと vSwitch ID:v2.5.0 以降 プライベート IP アドレスと EIP:v2.12.1 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
# プライベート IP アドレスが不要な場合は、プライベート IP アドレスのフィールドを空のままにします。
# 例:cn-hangzhou-k:vsw-i123456::eip-12345,cn-hangzhou-j:vsw-j654321::eip-54321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A}::${eip-A},${zone-B}:${vsw-B}::${eip-B}"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerロードバランサー名の指定
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name
説明 | サポートされる CCM バージョン |
ロードバランサーインスタンスの名前を指定します。NLB 名は 2~128 文字で、使用できる文字は英字、数字、ピリオド (.)、アンダースコア (_)、ハイフン (-) です。先頭は英字である必要があります。 | v2.5.0 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name: "${your-nlb-name}" # NLB 名。
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerロードバランサーのリソースグループの指定
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id
説明 | サポートされる CCM バージョン |
ロードバランサーが属するリソースグループを指定します。リソースグループ ID を指定した後は変更できません。 リソースグループ ID は、Alibaba Cloud リソース管理コンソールで照会できます。 | v2.5.0 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id: "${your-resource-group-id}" # リソースグループ ID。
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerデュアルスタック NLB の作成
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version
説明 | サポートされる CCM バージョン |
NLB のプロトコルバージョンを指定します。IP タイプは作成後に変更できません。この機能を使用するには、クラスターの kube-proxy のプロキシモードが IPVS である必要があります。有効値:
デフォルト値: | v2.5.0 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: "DualStack"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerロードバランサーへの追加タグの付与
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags
説明 | サポートされる CCM バージョン |
追加のタグを付与します。複数のタグはカンマ (,) で区切ります。例: 重要 このアノテーションを追加して Service に追加タグを指定した場合、コンソールで対応するロードバランサーインスタンスに加えられた追加のタグ変更が上書きされる可能性があります。 | v2.5.0 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags: "Key1=Value1,Key2=Value2"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer既存のロードバランサーの使用
アノテーション: 以下の表に示す複数のアノテーション。
アノテーション | 説明 | サポートされる CCM バージョン |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id | 既存のロードバランサーの ID を指定します。 | v2.5.0 以降 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners | Service に基づいて NLB リスナーの設定を同期するかどうかを決定します。有効値:
デフォルト値: |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "${your-nlb-id}" # NLB ID。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer共有帯域幅の関連付け
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth-package-id
説明 | サポートされる CCM バージョン |
共有帯域幅の ID。 共有帯域幅の ID は VPC コンソールで照会できます。 | v2.9.1 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth-package-id: "cbwp-xxxxxxxxxx"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerIPv6 のインターネットまたは内部ネットワークタイプの指定
アノテーション: 以下の表に示す複数のアノテーション。
アノテーション | 説明 | サポートされる CCM バージョン |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version | NLB のプロトコルバージョンを指定します。IP タイプは NLB の作成後に変更できません。この機能を使用するには、クラスターの kube-proxy のプロキシモードが IPVS である必要があります。有効値:
デフォルト値: | v2.5.0 以降 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ipv6-address-type | NLB の IPv6 ネットワークタイプを指定します。有効値:
デフォルト値: 説明 インターネット IPv6 を有効にするには、NLB インスタンスが存在する VPC に IPv6 ゲートウェイが存在する必要があります。詳細については、「IPv6 ゲートウェイの作成と管理」をご参照ください。 | v2.9.1 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: "DualStack"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ipv6-address-type: internet # IPv6 ネットワークタイプをインターネットとして指定します。
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerService 削除時の自動作成されたロードバランサーインスタンスの保持
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-lb-on-delete
説明 | サポートされる CCM バージョン |
LoadBalancer タイプの Service を削除する際に、Service によって作成された NLB インスタンスを保持し、NLB インスタンスとサーバーグループから この機能が有効な場合、Service の同期中に 有効値:
重要 この操作を実行するには、Service のタイプを変更するのではなく、Service を削除してください。そうしないと、Service が以前に保持された NLB に誤って再関連付けされる可能性があります。 | v2.10.0 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-lb-on-delete: "true"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerリスナーの一般的な操作
リスナーセキュリティグループの設定
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-security-group-ids
説明 | サポートされる CCM バージョン |
リスナーセキュリティグループを設定します。複数の値はカンマ (,) で区切ります。例: | v2.6.0 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-security-group-ids: "sg-aaaaa,sg-bbbbb" # 複数のセキュリティグループはカンマで区切ります。
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerリスナーに TCP プロトコルと UDP プロトコルの両方を設定する
説明 | サポートされる CCM バージョン |
この機能には、Kubernetes クラスターバージョン v1.24 以降が必要です。クラスターバージョンのアップグレードについては、「ACK クラスターの Kubernetes バージョンのアップグレード」をご参照ください。 | 該当なし |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: udp
port: 80
protocol: UDP
targetPort: 81
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerTCP リスナーの作成
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerUDP リスナーの作成
UDP リスナーを作成する際にヘルスチェックを手動で指定しない場合、デフォルトでサーバーグループに対して TCP ヘルスチェックが有効になります。アノテーションを使用して UDP ヘルスチェックを明示的に指定するか、ヘルスチェックを無効にすることを推奨します。
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: udp
port: 80
protocol: UDP
targetPort: 80
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerTCP/SSL リスナーの作成
アノテーション: 以下の表に示す複数のアノテーション。
アノテーション | 説明 | サポートされる CCM バージョン |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port | リスナーのプロトコルタイプを設定します。複数の値はカンマで区切ります。例: | v2.5.0 以降 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id | サーバー証明書 ID。証明書管理サービスコンソールにログインし、SSL 証明書ページで証明書を作成および表示できます。 次の図に示します。
|
現在、TCP/SSL リスナーはクライアント IP 保持が有効になっているサーバーグループをサポートしていません。つまり、同じ Service に対して service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:${port}" と service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-client-ip: "on" の両方のアノテーションを設定することはできません。NLB を介してクライアント IP アドレスを取得する方法の詳細については、「NLB を介したクライアントの送信元 IP アドレスの取得」をご参照ください。
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:443"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 80
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerリスナーポート範囲の設定
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-listener-port-range
説明 | サポートされる CCM バージョン |
Terway ネットワークプラグインを使用している場合にのみ利用可能です。 NLB で全ポート転送用のリスナーポート範囲を設定することで、指定したポート範囲をリッスンし、トラフィックをバックエンドサーバーの対応するポートに転送できます。 フォーマットは
| v2.11.4 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
# ポート範囲 80-100 と 400-500 のリスナーを設定します。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-listener-port-range: "80-100:80,400-500:443"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
# targetPort はバックエンドサーバーのヘルスチェックポートであり、整数である必要があります。
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 80
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer相互認証の有効化
アノテーション: 以下の表に示す複数のアノテーション。
アノテーション | 説明 | サポートされる CCM バージョン |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port | リスナーのプロトコルタイプを設定します。複数の値はカンマで区切ります。例: | v2.5.0 以降 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id | サーバー証明書 ID。証明書管理サービスコンソールにログインし、SSL 証明書ページで証明書を作成および表示できます。 次の図に示します。
| |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert-id | CA 証明書の ID。証明書管理サービスコンソールにログインし、PCA 証明書管理ページで証明書の詳細から ID を確認できます。
| |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert | 相互認証を有効または無効にします。有効値:
デフォルト値: |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:443"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert-id: "${your-cacert-id}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert: "on"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 80
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerTLS セキュリティポリシーの設定
アノテーション: 以下の表に示す複数のアノテーション。
アノテーション | 説明 | サポートされる CCM バージョン |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port | リスナーのプロトコルタイプを設定します。複数の値はカンマで区切ります。例: | v2.5.0 以降 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id | サーバー証明書 ID。証明書管理サービスコンソールにログインし、SSL 証明書ページで証明書を作成および表示できます。 次の図に示します。
| |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-tls-cipher-policy | セキュリティポリシー ID。システムおよびカスタムセキュリティポリシーの両方がサポートされています。有効値:
デフォルト値: |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:443"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-tls-cipher-policy: "tls_cipher_policy_1_0"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 80
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerProxy Protocol の有効化
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol
説明 | サポートされる CCM バージョン |
Proxy Protocol を使用してクライアントの送信元 IP アドレスをバックエンドサーバーに伝送するかどうかを有効または無効にします。有効値:
デフォルト値: 重要 Proxy Protocol を有効にする前に、バックエンドサービスが Proxy Protocol v2 をサポートしていることを確認してください。サポートしていない場合、トラフィックは失敗します。この設定は慎重に行ってください。 | v2.5.0 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol: "on"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerProxy Protocol での追加情報の伝送
アノテーション: 以下の表に示す複数のアノテーション。
アノテーション | 説明 | サポートされる CCM バージョン |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol | Proxy Protocol を使用してクライアントの送信元 IP アドレスをバックエンドサーバーに伝送するかどうかを有効または無効にします。有効値:
デフォルト値: 重要 Proxy Protocol を有効にする前に、バックエンドサービスが Proxy Protocol v2 をサポートしていることを確認してください。サポートしていない場合、トラフィックは失敗します。この設定は慎重に行ってください。 | v2.5.0 以降 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-vpc-id-enabled | Proxy Protocol を使用して VpcId をバックエンドサーバーに伝送するかどうかを有効または無効にします。有効値:
デフォルト値: | v2.9.1 以降 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-ep-id-enabled | Proxy Protocol を使用して PrivateLinkEpId をバックエンドサーバーに伝送するかどうかを有効または無効にします。有効値:
デフォルト値: | v2.9.1 以降 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-eps-id-enabled | Proxy Protocol を使用して PrivateLinkEpsId をバックエンドサーバーに伝送するかどうかを有効または無効にします。有効値:
デフォルト値: | v2.9.1 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-ep-id-enabled: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-eps-id-enabled: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-vpc-id-enabled: "on"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerリスナーの秒間新規接続数 (CPS) の上限設定
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cps
説明 | サポートされる CCM バージョン |
NLB インスタンスの秒間最大新規接続数。有効値:[0, 1000000]。値 0 は制限なしを意味します。 | v2.5.0 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cps: "100"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerリスナーのアイドル接続タイムアウトの設定
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idle-timeout
説明 | サポートされる CCM バージョン |
アイドル接続のタイムアウト期間。単位:秒。有効値:[10, 900]。 デフォルト値:900 | v2.5.0 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idle-timeout: "60"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerALPN ポリシーの設定
アノテーション: 以下の表に示す複数のアノテーション。
アノテーション | 説明 | サポートされる CCM バージョン |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port | リスナーのプロトコルタイプを設定します。複数の値はカンマで区切ります。例: | v2.5.0 以降 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id | サーバー証明書 ID。証明書管理サービスコンソールにログインし、SSL 証明書ページで証明書を作成および表示できます。 次の図に示します。
| |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn | ALPN を有効または無効にします。有効値:
デフォルト値: | v2.10.0 以降 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn-policy | ALPN ポリシー。有効値:
その他の有効値については、CreateListener API の |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:443"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn-policy: "HTTP1Only"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 80
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerサーバーグループの一般的な操作
スケジューリングアルゴリズムの設定
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler
説明 | サポートされる CCM バージョン |
スケジューリングアルゴリズム。有効値:
デフォルト値: その他の有効値については、CreateServerGroup API の | v2.5.0 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler: "sch"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer接続ドレインの有効化
アノテーション: 以下の表に示す複数のアノテーション。
アノテーション | 説明 | サポートされる CCM バージョン |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain | 接続ドレインを有効または無効にします。有効にすると、バックエンドサーバーが削除されたり、ヘルスチェックに失敗した場合に次の動作が発生します。
デフォルト値: | v2.5.0 以降 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout | 接続ドレインのタイムアウト期間を設定します。
|
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: "30"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerクライアント IP 保持の有効化
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-client-ip
説明 | サポートされる CCM バージョン |
クライアント IP の保持を有効または無効にします。有効値:
デフォルト値: | v2.5.0 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-client-ip: "on"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerTCP ヘルスチェックの設定
アノテーション: 以下の表に示す複数のアノテーション。デフォルトでは、TCP ポートに対してヘルスチェックが有効になっています。TCP ヘルスチェックをカスタマイズするには、以下のすべてのアノテーションを指定する必要があります。
アノテーション | 説明 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag | ヘルスチェックを有効または無効にします。有効値:
デフォルト値: |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type | ヘルスチェックプロトコル。有効値:
デフォルト値: |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-port | ヘルスチェック用のサーバーポート。有効値:[0, 65535]。デフォルト値:0。これはサーバーポートがヘルスチェックに使用されることを意味します。 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout | ヘルスチェック応答の最大タイムアウト。単位:秒。有効値:[1, 300]。 デフォルト値:5 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold | 以前に異常とマークされたサーバーを正常とマークするために必要な連続した成功したヘルスチェックの回数。有効値:[2, 10]。 デフォルト値:2 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold | 以前に正常とマークされたサーバーを異常とマークするために必要な連続した失敗したヘルスチェックの回数。有効値:[2, 10]。 デフォルト値:2 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval | ヘルスチェックの間隔。単位:秒。有効値:[1, 50]。 デフォルト値:10 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type: "tcp"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout: "8"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold: "4"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold: "4"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval: "5"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerHTTP ヘルスチェックの設定
アノテーション: 以下の表に示す複数のアノテーション。HTTP ヘルスチェックを設定するには、以下のすべてのアノテーションを指定する必要があります。
アノテーション | 説明 | サポートされる CCM バージョン |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag | ヘルスチェックを有効または無効にします。有効値:
デフォルト値: | v2.5.0 以降 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type | ヘルスチェックプロトコル。有効値:
デフォルト値: | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-uri | ヘルスチェックパス。パスは 1~80 文字で、使用できる文字は英字、数字、特殊文字のみです。スラッシュ (/) で始まる必要があります。詳細については、「CreateServerGroup」をご参照ください。 説明 このパラメーターは、 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-domain | ヘルスチェックに使用されるドメイン名。有効値:
説明 このパラメーターは、 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-port | ヘルスチェック用のサーバーポート。有効値:[0, 65535]。デフォルト値:0。これはサーバーポートがヘルスチェックに使用されることを意味します。 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout | ヘルスチェック応答の最大タイムアウト。単位:秒。有効値:[1, 300]。 デフォルト値:5 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold | 以前に異常とマークされたサーバーを正常とマークするために必要な連続した成功したヘルスチェックの回数。有効値:[2, 10]。 デフォルト値:2 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold | 以前に正常とマークされたサーバーを異常とマークするために必要な連続した失敗したヘルスチェックの回数。有効値:[2, 10]。 デフォルト値:2 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval | ヘルスチェックの間隔。単位:秒。有効値:[1, 50]。 デフォルト値:10 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-method | ヘルスチェックメソッド。有効値:
説明 このパラメーターは、 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type: "http"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-uri: "/test/index.html"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-domain: "www.test.com"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold: "4"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold: "4"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout: "10"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval: "5"
# ヘルスチェックメソッドを設定します。このアノテーションは任意です。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-method: "head"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancerサーバーグループタイプの設定
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-server-group-type
説明 | サポートされる CCM バージョン |
サーバーグループタイプを設定します。有効値:
デフォルト値: NLB サーバーグループタイプの詳細については、「NLB サーバーグループ」をご参照ください。 | v2.8.0 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-server-group-type: "Ip"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer既存のサーバーグループの再利用
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port
このアノテーションを使用して、既存の仮想サーバーグループを再利用できます。このアノテーションは、既存の NLB を再利用する場合にのみ有効です。詳細については、「既存のロードバランサーを再利用してクラスター間でサービスをデプロイする」をご参照ください。
Service のトラフィック重みの設定
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight
複数の Service が同じ NLB を共有する場合、このアノテーションを使用して現在の Service のトラフィックの重みを設定できます。このアノテーションは、既存のサーバーグループを再利用する場合にのみ有効です。詳細については、「既存のロードバランサーを再利用してクラスター間でサービスをデプロイする」をご参照ください。
バックエンドサーバーの重み更新の無視
アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ignore-weight-update
説明 | サポートされる CCM バージョン |
Service の同期中にバックエンドサーバーの重みの更新をスキップします。CCM 以外のメカニズムでバックエンドサーバーの重みをを手動で管理する必要がある場合に使用します。有効値:
デフォルト値: | v2.11.1 以降 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ignore-weight-update: "on"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
