GKE On-Prem クラスタは、「統合」または「手動」のいずれかの負荷分散モードで実行できます。統合モードでは、GKE On-Prem クラスタは F5 BIG-IP ロードバランサを使用します。手動モードでは、別のロードバランサを手動で構成します。たとえば、Citrix ロードバランサや Seesaw ロードバランサなどを手動で構成できます。
手動負荷分散モードでは、統合モードよりも多くの構成を行う必要があります。このページでは、手動モードで必要な手順について説明します。
制限事項
手動負荷分散には次の制限事項があります。
DHCP を使用してクラスタノードに IP アドレスを割り当てることはできません。静的ノード IP アドレスを割り当てる必要があります。
タイプ
LoadBalancer
の Service をクラスタ外のクライアントに公開することはできません。ただし、NodePort
タイプの Service を作成し、それらをバックエンドとして使用するようにロードバランサを手動で構成できます。また、Ingress
オブジェクトを使用して Service を公開することもできます。クラスタノードを追加または削除する場合は、それに応じてロードバランサを手動で構成する必要があります。
手動負荷分散のサポートの取得について
Google では、手動負荷分散モードを使用して構成されたロードバランサはサポートされません。ロードバランサに問題が発生した場合は、ロードバランサのベンダーにお問い合わせください。
IP アドレスの予約
作成する各クラスタには、ノードと呼ばれる VM が 3 つ以上あります。作成するクラスタ内の各ノードの IP アドレスを予約します。たとえば、4 つのノードを持つ管理クラスタと 3 つのノードを持つユーザー クラスタを作成する場合は、ノード用に 7 つの IP アドレスを予約します。すべてのノード IP アドレスがルーティング可能となるようにルーターを構成します。
また、負荷分散用に次の VIP を予約する必要があります。
- 管理コントロール プレーンの VIP(公開ポート: TCP 443)
- 管理クラスタ Ingress コントローラの VIP(公開ポート: TCP 80、TCP 443)
- アドオン マネージャーの VIP(公開ポート: TCP 8443)
- ユーザー コントロール プレーンの VIP(公開ポート: TCP 443)
- ユーザー クラスタ Ingress コントローラの VIP(公開ポート: TCP 80、TCP 443)
ノードポートの予約
GKE On-Prem は、タイプ NodePort
の Kubernetes Service オブジェクトを使用してトラフィックを Pod にルーティングします。
Service には ServicePort オブジェクトの配列である ports
フィールドがあります。NodePort
タイプの Service 内では、各 ServicePort オブジェクトに protocol
、port
、nodePort
、および targetPort
があります。たとえば、ports
配列に ServicePort オブジェクトが 2 つある Service のマニフェストの一部は次のとおりです。
... kind: Service ... spec: ... type: NodePort ports: - protocol: TCP port: 80 nodePort: 32676 targetPort: 8080 - protocol: TCP port: 443 nodePort: 32677 targetPort: 443 ...
上述の Service がユーザー クラスタの Ingress コントローラを表すとします。さらに、次の選択を行ったとします。
203.0.113.5
は、ユーザー クラスタ Ingress コントローラの VIP です。- ユーザー クラスタのノードアドレスは
192.168.0.10
、192.168.0.11
、192.168.0.12
です。
ロードバランサを構成すると、トラフィックは次のように転送されます。
クライアントは TCP ポート 80 で
203.0.113.5
にリクエストを送信します。ロードバランサはユーザー クラスタ ノードを選択します。この例では、ノードアドレスは192.168.0.11
であると仮定しています。ロードバランサは、リクエストを TCP ポート 32676 で192.168.0.11
に転送します。ノードの iptables ルールは、TCP ポート 8080 で適切な Pod にリクエストを転送します。クライアントは TCP ポート 443 で
203.0.113.5
にリクエストを送信します。ロードバランサはユーザー クラスタ ノードを選択します。この例では、ノードアドレスは192.168.0.10
であると仮定しています。ロードバランサは、リクエストを TCP ポート 32677 で192.168.0.10
に転送します。ノードの iptables ルールは、TCP ポート 443 で適切な Pod にリクエストを転送します。
VIP 用の Service オブジェクトを作成する必要はありません。これは、GKE On-Prem により自動的に行われます。ただし、VIP、TCP ポートのペアごとに、次の項目を選択して指定する必要があります。
- 一連のノード IP アドレス
nodePort
の値
次に示す 7 通りの nodePort
値を予約する必要があります。
- 管理クラスタ コントロール プレーン用の
nodePort
: TCP ポート 443 - 管理クラスタ Ingress コントローラ用の
nodePort
: TCP ポート 80 - 管理クラスタ Ingress コントローラ用の
nodePort
: TCP ポート 443 - アドオン マネージャー用の
nodePort
: TCP ポート 8443 - ユーザー コントロール プレーン用の
nodePort
: TCP ポート 80 - ユーザー クラスタ Ingress コントローラ用の
nodePort
: TCP ポート 80 - ユーザー クラスタ Ingress コントローラ用の
nodePort
: TCP ポート 443
GKE On-Prem 構成ファイルの変更
GKE On-Prem をインストールする際、構成ファイルを生成します。その構成ファイル中の以下のセクションを、次のように変更する必要があります。
lbmode
をManual
に設定する。admincluster:ipblockfilepath
を管理クラスタの静的 IP YAML ファイルのパスに設定します。これについての詳細は、静的 IP の構成をご覧ください。Manual
モードでは DHCP は選択できません。usercluster: ipblockfilepath
をユーザー クラスタの静的 IP YAML ファイルのパスに設定します。admincluster:manuallbspec
フィールドを管理クラスタ用に選択したnodePort
値に更新します。usercluster:manuallbspec
セクションをユーザー クラスタ用に選択したnodePort
値に更新します。
次の例は、更新された構成ファイルの一部を示しています。
lbmode: Manual admincluster: ipblockfilepath: "ipblock1.yaml" manuallbspec: ingresshttpnodeport: 32527 ingresshttpsnodeport: 30139 controlplanenodeport: 30968 addonsnodeport: 31405 usercluster: ipblockfilepath: "env/default/ipblock2.yaml" manuallbspec: ingresshttpnodeport: 30243 ingresshttpsnodeport: 30879 controlplanenodeport: 30562
ロードバランサを構成する
構成ファイルを更新したら、ロードバランサの管理コンソールにログインして、VIP を構成します。
まず、管理クラスタとユーザー クラスタの IP アドレスプールが異なることを確認します。
前述のとおり、5 つの VIP と 7 つのポートを構成する必要があります。そこで、以下の 7 つの仮想サービスをロードバランサに作成します。
- 管理クラスタ コントロール プレーン、TCP ポート 443
- 管理クラスタ Ingress コントローラ、TCP ポート 80
- 管理クラスタ Ingress コントローラ、TCP ポート 443
- アドオン マネージャー、TCP ポート 8443
- ユーザー コントロール プレーン、TCP ポート 80
- ユーザー クラスタ Ingress コントローラ、TCP ポート 80
- ユーザー クラスタ Ingress コントローラ、TCP ポート 443
次のステップ
トラブルシューティング
詳しくは、トラブルシューティングを参照してください。