ワーカー・ノードへの静的ルートの追加
IBM Cloud® Kubernetes Service クラスターの静的ルート・アドオンを有効化することにより、ワーカー・ノードに静的ルートを作成します。
静的ルートについて
プライベート・ネットワークを介して他のネットワークと通信するようにクラスター・ネットワークを構成するときには、ワーカー・ノードにカスタム静的ルートを追加する必要がある場合があります。 静的ルートにより、ワーカー・ノードが、VPN または Gateway Appliance を介して、応答パケットをクラスターからオンプレミス・データ・センターの IP アドレスに正常に転送できるようになります。
例えば、VPN を使用して、プライベート・ネットワークを介してクラスターをオンプレミス・データ・センターに接続することができます。 さらに、プライベート VPN 接続により、クラスターとデータ・センターの間で要求内のソース IP アドレスが保持されます。
オンプレミス・サービスがクラスター内のアプリに要求を送信すると、リバース・パス・フィルタリング (RPF) のため、アプリ・ポッドがオンになっているワーカー・ノードは応答をドロップします。 RPF は、ワーカー・ノードのルーティング・テーブルにリストされていない IP アドレスに対する応答をドロップする Linux カーネルの機能です。 要求で保持されていたオンプレミス IP アドレスはワーカー・ノードによってルーティング可能ではないため、応答はドロップされます。
この場合、静的経路を作成して、要求からの送信元 IP アドレスがオンプレミス・サブネットの 1 つからのものである場合に、代わりに VPN ゲートウェイ IP アドレスに応答が送信されるようにすることができます。 この静的ルートをワーカー・ノードのルーティング・テーブルに追加することにより、以下のことが保証されます。
- オンプレミスの IP アドレスを指すルーティング・ルールが存在するため、RPF によって応答パケットがドロップされることはありません。
- 応答パケットは、最初に VPN ゲートウェイ IP アドレスを経由して正常にルーティングされ、その後、オンプレミス IP アドレスに転送されます。
静的ルート・クラスター・アドオンを使用して行えることは、静的ルートの適用および管理のみです。 VPN、ゲートウェイ・アプライアンス、または IBM Cloud® Direct Link 接続をお客様自身で構成して管理する必要があります。
静的ルート・アドオンの有効化
IBM Cloud Kubernetes Service で静的ルートの使用を開始するには、静的ルート・アドオンを有効にします。
開始前に
- IBM Cloud Kubernetes Service でのクラスターに対する 管理者 IAM プラットフォーム・アクセス役割 があることを確認します。
- アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。
コンソールからの静的経路アドオンの有効化
IBM Cloud コンソールを使用するには、以下の手順を実行します。
- クラスター・ダッシュボードで、静的ルート・アドオンのインストール先のクラスターの名前をクリックします。
- 静的ルート・カード上で、**「インストール」**をクリックします。
- **「インストール」**をもう一度クリックします。
- 静的ルート・カードで、アドオンがリストされていることを確認します。
CLI を使用した静的経路アドオンの有効化
CLI を使用するには、以下の手順を実行します。
-
static-route
アドオンを有効にします。ibmcloud ks cluster addon enable static-route --cluster <cluster_name_or_ID>
-
静的ルート・アドオンの状況が
Addon Ready
であることを確認します。ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
出力例
Name Version Health State Health Status static-route 1.0.0 normal Addon Ready
静的ルートの作成
静的ルート・アドオンを有効化したら、カスタム・ルートのリソースを作成して適用することができます。
-
静的ルート・リソース用の YAML ファイルを作成します。
apiVersion: static-route.ibm.com/v1 kind: StaticRoute metadata: name: <route_name> spec: subnet: "<subnet_CIDR>" gateway: "<gateway_IP>" selectors: - key: "<label_key>" values: - "<label_value>" operator: In
例
apiVersion: static-route.ibm.com/v1 kind: StaticRoute metadata: name: mystaticroute spec: subnet: "192.168.0.0/24" gateway: "10.0.0.1" selectors: - key: "kubernetes.io/arch" values: - "amd64" operator: In
subnet
- ワーカー・ノードへの要求の送信元となる外部サブネット (オンプレミス・ネットワーク内のサブネットなど) の CIDR を指定します。 外部サブネットを以下の予約済み範囲に含めることはできません。 デバイス相互接続の範囲
198.18.0.0/15
は使用できます。10.0.0.0/8
172.16.0.0/16
172.18.0.0/16
172.19.0.0/16
172.20.0.0/16
gateway
- Gateway IP アドレスがワーカー・ノードと同じサブネット上に存在する場合は、Gateway IP アドレスを指定します。 Gateway IP アドレスが IBM Cloud プライベート・ネットワーク内の別のサブネットに存在する場合は、このフィールドを含めないでください。 この場合、ワーカー・ノードはプライベート・ネットワークのバックエンド・ルーターに応答を送信し、ルーターは、他のサブネット上のゲートウェイに応答を送信します。 静的ルートが作成されると、
10.0.0.0/8
の範囲内のバックエンド・ルーターの IP アドレスが、自動的にデフォルトのゲートウェイとして割り当てられます。 selectors
- ワーカー・ノード・ラベルに基づいて、特定のワーカー・ノードにのみ静的ルートを作成するには、そのラベルの
key
およびvalues
を含めます。
-
YAML ファイルをクラスターに適用して、静的ルートを作成します。
kubectl apply -f <route_name>.yaml
-
静的ルートが作成されたことを確認します。 出力で、静的経路を作成した各ワーカー・ノードの
node_status
を確認します。kubectl get staticroute <route_name> -o yaml
出力例
apiVersion: static-route.ibm.com/v1 kind: StaticRoute metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"static-route.ibm.com/v1","kind":"StaticRoute","metadata":{"annotations":{},"name":"mystaticroute"},"spec":{"selectors":[{"key":"kubernetes.io/arch","operator":"In","values":["amd64"]}],"subnet":"10.94.227.46/24"}} creationTimestamp: "2020-05-20T16:43:12Z" finalizers: - finalizer.static-route.ibm.com generation: 1 name: mystaticroute resourceVersion: "3753886" selfLink: /apis/static-route.ibm.com/v1/staticroutes/mystaticroute uid: f284359f-9d13-4e27-9d3a-8fb38cbc7a5c spec: selectors: - key: kubernetes.io/arch operator: In values: - amd64 subnet: 10.94.227.46/24 status: nodeStatus: - error: "" hostname: 10.94.227.19 state: gateway: 10.94.227.1 selectors: - key: kubernetes.io/arch operator: In values: - amd64 subnet: 10.94.227.46/24 - error: "" hostname: 10.94.227.22 state: gateway: 10.94.227.1 selectors: - key: kubernetes.io/arch operator: In values: - amd64 subnet: 10.94.227.46/24