tencent cloud

Tencent Kubernetes Engine

ドキュメントTencent Kubernetes Engine

LoadBalancerを使用してPodモードServiceにダイレクト接続します

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2023-04-26 18:43:22
AI翻訳

ユースケース

ネイティブLoadBalancerモードのServiceは、Cloud Load Balancer(CLB)を自動的に作成でき、クラスターのNodeportを介してクラスター内に転送し、さらにiptableまたはipvsを介して2回転送します。このモードのServiceはほとんどのユースケースに対応できますが、以下のシナリオではダイレクト接続PodモードのServiceを使用することを推奨します。
ソースIPを取得する必要がある場合(非ダイレクト接続モードでは、Local転送を有効にする必要があります)。
より高い転送性能が求められる場合(非ダイレクト接続モードでは、CLBとServiceそのものとの間に2層のCLBがあるため、性能がある程度低下します)。
Podレベルまで完全なヘルスチェックやセッション維持が必要な場合(非ダイレクト接続モードでは、CLBとServiceそのものとの間に2層のCLBがあるため、ヘルスチェックやセッション維持機能の設定が困難になります)。
説明
クラスターがServerlessクラスターの場合、デフォルトでダイレクト接続Podモードになっているため、何も操作する必要はありません。
現在のGlobalRouterとVPC-CNIコンテナネットワークモードは、どちらもダイレクト接続Podモードをサポートしています。クラスターリストでクラスターIDをクリックして、クラスター詳細ページに進み、クラスターの「基本情報」ページで現在のクラスターが使用しているネットワークプラグインを確認できます。

コンテナネットワークモードをVPC-CNIにする

使用制限

クラスターKubernetesのバージョンは1.12以上である必要があります。
クラスターネットワークモードでは、VPC-CNI ENIモードを有効にする必要があります。
ダイレクト接続モードServiceが使用するワークロードは、VPC-CNI ENIモードを使用する必要があります。
デフォルトのCLBバックエンド数の制限は200です。バインドされたワークロードのコピーが200を超える場合、チケットを提出することによって、CLBのクォータを増やすことができます。
CLB自体にバインドされたENIの機能制限に対応します。詳細については、ENIのバインドをご参照ください。
ダイレクト接続Podモードのワークロード更新が有効になっている場合、CLBのヘルスチェック状況に基づいてローリングアップデートが行われるため、更新速度にある程度の影響が生じます。
HostNetworkタイプのワークロードはサポートされていません。

操作手順

コンソール操作ガイド
YAML操作ガイド
1. TKEコンソールにログインします。
2. コンソールでServiceを作成ステップを参照し、Serviceの新規作成ページに進み、実際のニーズに応じてServiceパラメータを設定します。 そのうち、いくつかの主要なパラメータ情報は、下の図のように設定する必要があります。


サービスアクセス方法:パブリックネットワークLBアクセスまたはプライベートネットワークLBアクセスを選択します。
ネットワークモード:CLBダイレクト接続Podモードを使用にチェックを入れます。
Workloadのバインド:Workloadを参照を選択します。
3. サービスの作成をクリックし、作成を完了します。
ダイレクト接続PodモードServiceのYAML設定は、通常のService YAML設定と同じです。例のannotationは、ダイレクト接続Podモードが有効かどうかを表します。
kind: Service
apiVersion: v1
metadata:
annotations:
service.cloud.tencent.com/direct-access: "true" ##ダイレクト接続Podモードの有効化
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
type: LoadBalancer

annotation拡張

CLBに関する設定については、TkeServiceConfigの説明をご参照ください。そのうちannotationに関する設定は次のとおりです。
service.cloud.tencent.com/tke-service-config: [tke-service-configName]

注意事項

ローリングアップデート時の可用性を保証する方法

Kubernetesが公式に提供しているReadinessGateは、主にPodのステータスを制御するために用いられる機能で、クラスターバージョンは1.12以上である必要があります。デフォルトでは、PodにはPodScheduled、Initialized、ContainersReadyというConditionがあります。これらのステータスがすべてReadyになったときに、Pod ReadyのConditionが成立します。ただし、クラウドネイティブのシナリオでは、Podのステータスが他のステータスを参照する必要がある場合があります。ReadinessGateでは、Podのステータスの判断にフェンスを追加し、サードパーティが判断・制御できる仕組みを提供しています。これにより、Podのステータスはサードパーティにバインドされます。

ダイレクト接続モードでのローリングアップデートの変化

ユーザーがアプリケーションのローリングアップデートを開始すると、Kubernetesはアップデートポリシーに基づいてアップデートを行います。ただし、Podの起動を判断するためのマーカーにはPod自体のステータスだけが含まれ、このPodがCLBでのヘルスチェックをパスするように設定されているどうかは考慮されません。アクセス層のコンポーネントに高い負荷がかかっている際、そのようなPodを速やかにスケジューリングできない場合、ローリングアップデートに成功したPodが対外的にサービスを提供せず、その結果サービスの中断が生じる可能性があります。 TKEアクセス層コンポーネントは、ローリングアップデートやCLBのバックエンドステータスをバインドするために、Kubernetes 1.12で導入された新機能であるReadinessGateを導入しています。TKEアクセス層コンポーネントのバックエンドは、バインドが成功し、ヘルスチェックにパスしたことを確認した場合のみ、ReadinessGate のステータスを設定することで、PodのステータスをReadyにして、ワークロード全体のローリングアップデートを進めるようになっています。

クラスターでのReadinessGateの使用

Kubernetesクラスターは、サービス登録の仕組みを提供しているため、サービスをMutatingWebhookConfigurationsリソースという形でクラスターに登録するだけで利用できます。クラスターはPodが作成されると、設定されたコールバックパスに従ってクラスターに通知されます。この際、作成前の操作として、PodにReadinessGateを追加することができます。このコールバックプロセスはHTTPSである必要があります。つまり、MutatingWebhookConfigurations`でリクエストを発行するCAを設定し、そのCAが発行する証明書をサーバー側で設定する必要があります。

ReadinessGateのメカニズムのディザスタリカバリ

ユーザーのクラスター内のサービス登録や証明書は、ユーザーによって削除される可能性があります。これらのシステムコンポーネントリソースはユーザーが変更や破棄をすべきではありませんが、ユーザーがクラスターを検索したり、操作を誤ったりすると、このような問題は避けて通れません。そのため、これらのリソースの整合性は起動時にアクセス層コンポーネントによってチェックされ、整合性が損なわれた場合には再構築され、システムの堅牢性を高めます。詳細については、Kubernetes Pods ReadinessGateの特性をご参照ください。

コンテナのネットワークモードをGlobalRouterにする

使用制限

個々のワークロードは1つのネットワークモードでのみ実行できます。ENIまたはGlobalRouteとのいずれかのダイレクト接続を選択できます。
帯域幅でのアカウント転送のみをサポートしています。
デフォルトのCLBバックエンド数の制限は200です。バインドされたワークロードのコピーが200を超える場合、チケットを提出することによって、CLBのクォータを増やすことができます。
CLBを使用してPodにダイレクト接続する場合は、ネットワークリンクがCVMのセキュリティグループによる制限を受けることに注意し、セキュリティグループの設定が対応するプロトコルやポートに対して開放されていること、CVM上のワークロードに対応するポートが有効になっていることを確認する必要があります。
ダイレクト接続を有効にすると、デフォルトでReadinessGateReadinessチェックが開始され、Podをローリングアップデートする際に、CLBのトラフィックが正常かどうかをチェックします。ビジネスサイドで正しいヘルスチェックの設定を行う必要があります。詳細については、TkeServiceConfigの説明をご参照ください。
ダイレクト接続GlobalrouterモードのPodは、次の2つの方法で使用できます。
CCN経由で使用します。CCNがバインドされたIPアドレスを検証し、バインドエラーやアドレスループバックなどのよくある問題を防ぐことができるため、この方法を使用することを推奨します。操作手順は次のとおりです。
a. CCNインスタンスを作成済みであること。詳細については、CCNインスタンスの新規作成をご参照ください。
b. クラスターが配置されているVPC を、作成済みのCCNインスタンスに追加します。
c. コンテナネットワークセグメントをCCNに登録し、クラスターの基本情報ページでCCNを有効にします。
チケットを提出して申請できます。この方法は、CCNのIP検証機能を備えていないため、推奨しません。

YAML操作ガイド

ダイレクト接続PodモードServiceのYAML設定は、通常のService YAML設定と同じです。例のannotationは、ダイレクト接続Podモードが有効かどうかを表します。

使用の前提条件

kube-system/tke-service-controller-config ConfigMapにGlobalRouteDirectAccess: "true"を追加して、GlobalRouteダイレクト接続機能を有効にします。

Service YAMLでのダイレクト接続モードの有効化

kind: Service
apiVersion: v1
metadata:
annotations:
service.cloud.tencent.com/direct-access: "true" ##ダイレクト接続Podモードの有効化
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
type: LoadBalancer

annotation拡張

CLBに関する設定については、TkeServiceConfigの説明をご参照ください。そのうちannotationに関する設定は次のとおりです。
service.cloud.tencent.com/tke-service-config: [tke-service-configName]


ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック