IP マスカレード エージェント

このページでは、Kubernetes Engine の IP マスカレード エージェントの機能について説明します。

概要

IP マスカレードは、多対 1 の IP アドレス変換に使用されるネットワーク アドレス変換(NAT)の一種です。複数のソース IP アドレスを単一アドレスの背後に隠します。

クラスタで IP マスカレードを使用すると、個々のポッド IP アドレスがリンクローカル範囲と任意の追加 IP 範囲の外部トラフィックに公開されなくなり、クラスタのセキュリティが向上します。さらに、マスカレードを使用しない IP 範囲間の通信を設定することもできます。たとえば、192.168.0.0/16 のアドレス範囲にあるポッドが 10.0.0.0/8 のアドレス範囲のネットワーク リソースと通信できます。

始める前に

このタスクの準備をするには、次の手順を行います。

  • Cloud SDK をインストール済みであることを確認します。
  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project [PROJECT_ID]
  • デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone [COMPUTE_ZONE]

ip-masq-agent の動作

Kubernetes Engine での IP マスカレードは ip-masq-agent によって処理されます。これは Kubernetes バージョン 1.7.0 が実行されているクラスタで、ネットワーク ポリシーが有効になっている場合、または 10.0.0.0/8 のアドレス範囲外のクラスタ CIDR を使用している場合に動作するツールです。

ip-masq-agent は、ノードの IP およびクラスタ IP 範囲の外部にある宛先にトラフィックを送信するときにノードまたはポッド IP アドレスのマスカレード処理に使用する iptables ルールを設定します。ポッド IP アドレスはノードのアドレスの背後に隠されます。

エージェントはデフォルトで、RFC1918 で非マスカレード CIDR として規定されている 3 つのプライベート IP 範囲を処理するように設定されます。この範囲は 10.0.0.0/8172.16.0.0/12192.168.0.0/16 です。また、リンクローカル範囲(169.254.0.0/16)もデフォルトで非マスカレード CIDR として扱われます。

デフォルトで、エージェントの設定ファイルはコンテナにある /etc/config/ip-masq-agent ファイルから 60 秒ごとに再読み込みされます。

以下に、ip-masq-agent によって適用されるデフォルトの iptables ルールセットを示します。

iptables -t nat -L IP-MASQ-AGENT
RETURN     all  --  anywhere             169.254.0.0/16       /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             10.0.0.0/8           /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             172.16.0.0/12        /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             192.168.0.0/16       /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
MASQUERADE  all  --  anywhere            anywhere             /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE match dst-type !LOCAL

ConfigMap ファイルを使用してエージェントを設定する

上記のデフォルト ルールセットではクラスタにとって不十分な場合は、対象の IP 範囲をカスタマイズするための ConfigMap を作成して適用できます。

ConfigMap ファイルは YAML または JSON 構文で記述し、config というファイル名にする必要があります。ファイルには次の 3 つのキーを含めることができます。これらはすべて任意です。

  • nonMasqueradeCIDRs: マスカレード対象外のアドレス範囲を指定する CIDR 表記の文字列のリスト。
  • masqLinkLocal: リンクローカル接頭辞(169.254.0.0/16)へのトラフィックをマスカレードするかどうかを示すブール値。デフォルトは false です。
  • resyncInterval: エージェントが ConfigMap ファイルをディスクから同期しようとする間隔を表す整数値。書式は Nx です。N は整数で、xsms などの時間単位を表します。

たとえば次の ConfigMap ファイルを適用すると、10.0.0.0/8ip-masq-agent によって考慮されます。

config.yaml

nonMasqueradeCIDRs:
  - 10.0.0.0/8
resyncInterval: 60s

config.json

{
  "nonMasqueradeCIDRs": [
    "10.0.0.0/8"
  ],
  "resyncInterval": "60s"
}

デフォルトでは、リンクローカル範囲(169.254.0.0/16)も ip-masq-agent によって処理されます。

リンクローカル範囲が ip-masq-agent によって無視されるようにするには、ConfigMapmasqLinkLocal キーの値を true に設定します。次に例を示します。

config.yaml

nonMasqueradeCIDRs:
  - 10.0.0.0/8
resyncInterval: 60s
masqLinkLocal: true

config.json

{
  "nonMasqueradeCIDRs": [
    "10.0.0.0/8"
  ],
  "resyncInterval": "60s",
  "masqLinkLocal": true
}

ConfigMap をクラスタに追加する

ConfigMap をクラスタに追加するには、シェルまたはターミナル ウィンドウから次のコマンドを実行します。

kubectl create configmap ip-masq-agent --from-file=[CONFIG] --namespace=[NAMESPACE]

ここで

  • [CONFIG] は構成ファイルの名前です。
  • [NAMESPACE]ConfigMap が属している名前空間です。namespace オプションは必須ではありません。

上記の例の場合は、変更が適用されるまで 60 秒かかります。同期が完了すると、次のように iptables に変更が反映されます。

iptables -t nat -L IP-MASQ-AGENT
Chain IP-MASQ-AGENT (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             169.254.0.0/16       /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             10.0.0.0/8           /* ip-masq-agent: cluster-local */
MASQUERADE  all  --  anywhere            anywhere             /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE match dst-type !LOCAL

ip-masq-agent リソースを手動で作成する(オプション)

ip-masq-agent を手動で作成して設定しなければならない場合があります。

ip-masq-agent リソースを手動で作成するには、次のコマンドを実行します。

kubectl create -f https://raw.githubusercontent.com/kubernetes-incubator/ip-masq-agent/master/ip-masq-agent.yaml

このコマンドは Kubernetes によって提供される設定ファイルを使用します。

次に、今作成した ip-masq-agent リソースを使用するノードと DaemonSet に masq-agent-ds-ready ラベルを適用します。

kubectl label nodes [NAME] beta.kubernetes.io/masq-agent-ds-ready=true
kubectl label daemonsets [NAME] beta.kubernetes.io/masq-agent-ds-ready=true

ここで、[NAME] はリソースの名前です。

ip-masq-agent リソースをデプロイするには、上記のセクションの手順に沿って ConfigMap ファイルを作成し、適用します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...