Anthos GKE On-Prem の以前のバージョンのドキュメントを表示しています最新のドキュメントはこちらをご覧ください

ネットワーキング

Anthos GKE On-Prem(GKE On-Prem)では、ServiceIngress といった Kubernetes のネットワーキングのコンセプトが用いられています。このドキュメントでは、すぐに使用可能な GKE On-Prem ネットワーキングの構成方法について説明します。

クラスタ サービスのオペレーションとアイランド モード

GKE On-Prem はアイランド モード構成を使用します。このモードでは、Pod はクラスタ内で相互に直接通信できますが、クラスタの外部から Pod へはアクセスできません。この構成により、外部ネットワークに接続されていないネットワーク内に「アイランド」が形成されます。クラスタはクラスタノード全体に完全なノード間メッシュを形成し、Pod がクラスタ内の他の Pod に直接アクセスできるようにします。

Pod からクラスタ外のターゲットに向かう下りトラフィックは、すべてノード IP によって NAT 処理されます。GKE On-Prem は、クラスタ内にデプロイされた ClusterIP Service の Ingress オブジェクト ルールを処理する Envoy ベースの Ingress コントローラを搭載した L7 ロードバランサを備えています。Ingress コントローラ自体は、クラスタ内の NodePort Service として公開されます。

Ingress NodePort Service には、L3/L4 F5 ロードバランサを介してアクセスできます。インストールにより、ロードバランサで仮想 IP アドレス(VIP)がポート 80 とポート 443 で構成されます。VIP は Ingress コントローラの NodePort Service のポートを参照します。これは外部クライアントがクラスタ内の Service にアクセスする方法です。

ユーザー クラスタは、loadBalancerIP フィールドが Service の仕様で構成されている限り、LoadBalancer のタイプの Service を実行できます。loadBalancerIP フィールドに、使用する VIP を指定する必要があります。これは、Service の NodePorts を指す F5 で構成されます。

F5 ロードバランサを使用する代わりに、手動負荷分散モードを有効にすることもできます。手動負荷分散を使用する場合、タイプ LoadBalancer の Service は実行できません。代わりに、タイプ NodePort の Service を作成し、それらをバックエンドとして使用するようにロードバランサを手動で構成できます。また、Ingress オブジェクトを使用して Service を外部クライアントに公開することもできます。

VMware NSX-T のサポート

バージョン 1.2.0-gke.6 以降の GKE On-Prem では、VMware NSX-T のバージョン 2.4.2 をサポートしています。

ネットワーキング アーキテクチャ

GKE On-Prem のアーキテクチャを説明する図 GKE On-Prem ネットワーキング

ノード IP アドレス
DHCP またはノードの静的に割り当てられた IP アドレス(あるいは、仮想マシンまたは VM と呼ばれる)。データセンター内部でルーティング可能であることが必要です。静的 IP を手動で割り当てることができます。
Pod CIDR ブロック
クラスタのすべての Pod にはルーティングできない CIDR ブロック。この範囲から、より小さい /24 範囲がノード単位で割り当てられます。N 個のノードを持つクラスタが必要な場合は、N 個の /24 ブロックをサポートするうえで十分な大きさが、このブロックにあることを確認します。
Service CIDR ブロック
アイランド モードでは、Pod CIDR ブロックの場合と同様に、クラスタ内でのみ使用されます。ノード、VIP、Pod の CIDR ブロックと重複しない非公開 CIDR ブロック。クラスタ間で同じブロックを共有できます。ブロックのサイズによってサービスの数が決まります。Ingress サービスには 1 つの Service IP が必要です。クラスタ DNS などの Kubernetes サービスには 10 個以上の IP が必要です。
Service VIP
Service を公開するときに、L4 Ingress の F5 に対して構成する N 個のルーティング可能な IP アドレス。これらの VIP は、LoadBalancer 型の Service の作成時に設定する loadBalancerIP 値と同じです。
コントロール プレーン VIP
Kubernetes API サーバーの F5 ロードバランサに対して構成するルーティング可能な IP アドレス。
Ingress VIP
各ノードで実行する Envoy プロキシとの関連で、L7 Ingress の F5 ロードバランサに対して構成するルーティング可能な IP アドレス。

ネットワーク構成オプション

クラスタのネットワークを構成する方法はいくつかあります。

  • 1 つのグローバル vCenter ネットワークを選択する、または管理クラスタとユーザー クラスタに別の vCenter ネットワークを使用することができます。
  • HTTP プロキシを使用し、プロキシから除外するアドレスを選択できます。
  • DHCP または静的 IP 割り振りを選択できます。
  • 統合または手動の負荷分散モードを選択できます。

インストール中に、GKE On-Prem の構成ファイルで設定を指定します。

vCenter ネットワークの構成

config の network フィールドは、クラスタに使用する vCenter ネットワークを決定します。

  • グローバル vcenter.network フィールドは、1 つの特定のネットワークを指定します。
  • admincluster.vcenter.network はグローバル フィールドをオーバーライドし、管理クラスタに使用するネットワークを指定します。
  • usercluster.vcenter.network はグローバル フィールドをオーバーライドし、ユーザー クラスタに使用するネットワークを指定します。

例: URL 経由でウェブ アプリケーションにアクセスする

ゲストブック ウェブ アプリケーションが、frontend という名前の Deployment としてクラスタで実行されているとします。URL www.guestbook.com を使用してアプリケーションに接続することを必要としています。クラスタで実行されている Deployment に URL をマッピングする方法が必要です。これには Kubernetes Ingress オブジェクトを使用します。

まず、クラスタの既存の Ingress VIP を指定する *.guestbook.com のワイルドカード DNS エントリを作成します。

*.guestbook.com    A   [INGRESS_VIP]

続いて、フロントエンド Deployment の Service を作成する必要があります。kubectl expose を実行すると、Deployment の Pod を論理的にグループ化する Service が作成され、クラスタ内の共通の IP アドレスが指定されます。

kubectl expose deployment frontend

これで、次のような ClusterIP タイプの Service が作成されます。

apiVersion: v1
kind: Service
metadata:
  labels:
    app: guestbook
  name: frontend
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: guestbook
  type: ClusterIP

URL www.guestbook.com を先ほど作成したフロントエンド Service にマッピングする必要があります。以下の Ingress を適用すると、次のようにマッピングが作成されます。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: frontend
  labels:
    app: guestbook
spec:
  rules:
    - host: www.guestbook.com
      http:
        paths:
          - backend:
              serviceName: frontend   # name of the frontend Service
              servicePort: 80

次に www.guestbook.com にアクセスすると、ブラウザでウェブ アプリケーションが開きます。

この仕組みは次のとおりです。

  • ワイルドカード DNS エントリを作成したため、URL にアクセスするとクラスタの Ingress VIP にアクセスすることになります。
  • クラスタはホスト名に基づいて適切な Ingress オブジェクトを探します。この場合は www.guestbook.com です。
  • トラフィックはフロントエンド Pod にポート転送されます。

例: IP アドレス経由でウェブ アプリケーションにアクセスする

アプリケーションがウェブ アプリケーションでない場合や、ネットワークの制約がある場合は、Service 専用の VIP を作成することをおすすめします。これは、LoadBalancer タイプの Kubernetes Service を使用して行うことができます。

以下の Service は、guestbook アプリケーション専用の VIP を作成します。

apiVersion: v1
kind: Service
metadata:
  labels:
    app: guestbook
  name: frontend
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: guestbook
  type: LoadBalancer
  loadBalancerIP: [IP_ADDRESS]
  

この Service を適用すると、F5 コンソールに VIP が表示され、コンソールの [Pools] メニューにノードの IP アドレスが表示されます。IP アドレスにアクセスすると、アプリケーションが読み込まれます。