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

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

概要

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

クラスタで IP マスカレードを使用すると、個々のポッド IP アドレスがリンクローカル範囲(169.254.0.0/16)と任意の追加 IP 範囲の外部トラフィックに公開されなくなり、クラスタのセキュリティを向上させることができます。

さらに、IP マスカレードを使用することで、マスカレードを使用しない IP 範囲間の通信を構成することもできます。たとえば、192.168.0.0/16 のアドレス範囲にあるポッドがクラスタの CIDR 範囲(10.0.0.0/8)のネットワーク リソースと通信できます。

始める前に

このタスクの準備として、次の手順を行います。

  • Google Kubernetes Engine API が有効になっていることを確認します。
  • Google Kubernetes Engine API の有効化
  • Cloud SDK がインストール済みであることを確認します。
  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project [PROJECT_ID]
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone [COMPUTE_ZONE]
  • リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud を最新バージョンに更新します。
    gcloud components update

ip-masq-agent の動作

GKE での IP マスカレードは、ip-masq-agent ツールにより処理されます。ip-masq-agent が GKE v1.7 以降で自動的に有効になるのは、以下の追加条件のうち 1 つ以上が満たされる場合です。

クラスタが GKE v1.7 以降を使用しているが ip-masq-agent が自動で有効になるための他の条件に適合しない場合は、ip-masq-agent エージェントを手動で作成できます。

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

デフォルトでは、エージェントは RFC 1918 で規定される 3 つのプライベート IP 範囲を非マスカレード CIDR として扱うよう構成されます。

  • 10.0.0.0/8(ポッド IP アドレスに使用されるクラスタ CIDR)
  • 172.16.0.0/12
  • 192.168.0.0/16

デフォルトでは、IP マスカレードはリンクローカル範囲(169.254.0.0/16)も非マスカレード CIDR として扱います。

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

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

iptables -t nat -L IP-MASQ
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 を使用してエージェントを構成する

上記のデフォルトのルールセットがクラスタに対して十分でない場合は、ConfigMap を使用して対象の IP 範囲をカスタマイズできます。

ConfigMap ファイルは YAML または JSON で記述し、config というファイル名にする必要があります。

ファイルには次の 3 つのキーを含めることができます。これらのキーはすべてオプションです。

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

たとえば、以下の ConfigMap、config では 10.0.0.0/8ip-masq-agent により除外できます。

nonMasqueradeCIDRs:
  - 10.0.0.0/8
resyncInterval: 60s

デフォルトでは、リンクローカル範囲(169.254.0.0/16)は IP マスカレードから除外されます。

ip-masq-agent でリンクローカル範囲の IP マスカレードを有効にするには、ConfigMap で masqLinkLocal キーの値を true に設定します。

次に例を示します。

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

ConfigMap をクラスタに追加する

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

kubectl create configmap [CONFIGMAP_NAME] \
--from-file config \
--namespace kube-system

ここで:

  • [CONFIGMAP_NAME] は、選択する ConfigMap リソース(ip-masq-agent など)です。

次に例を示します。

kubectl create configmap ip-masq-agent --from-file config --namespace kube-system

同期が完了すると、次のように iptables に変更が反映されます。

iptables -t nat -L IP-MASQ
Chain IP-MASQ (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 apply -f \
https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/ip-masq-agent/ip-masq-agent.yaml

このコマンドは、Kubernetes により提供される構成ファイルを適用します。

次に、作成した ip-masq-agent リソースを使用するノードと DaemonSet に masq-agent-ds-ready ラベルを適用します。ノードと DaemonSets のラベル付けは、ip-masq-agent がこれらのリソースに対して動作することを示します。

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

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

ip-masq-agent ツールを構成するには、ConfigMap を使用してエージェントを構成するをご覧ください。

次のステップ

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

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

Kubernetes Engine のドキュメント