特定の Kebernetes ネームスペースまたは PCF 組織への SNAT IP アドレス プールの制限
次のタグを IP アドレス プールに追加することで、SNAT の IP アドレス プールから IP アドレスを割り当てる Kubernetes のネームスペースまたは PCF 組織を指定できます。
- Kubernetes 名前空間の場合:
scope: ncp/owner, tag: ns:<namespace_UUID> - PCF 組織の場合。スコープ:
scope: ncp/owner, tag: org:<org_UUID>
ネームスペースまたは組織の UUID は、次のいずれかのコマンドで取得できます。
kubectl get ns -o yaml cf org <org_name> --guid
次の点に注意してください。
- 各タグには 1 つの UUID を指定する必要があります。同じプールに対して複数のタグを作成できます。
- 古いタグ ベースで一部のネームスペースまたは組織に IP アドレスが割り当てられた後にタグを変更すると、Kubernetes サービスまたは PCF アプリケーションの SNAT 設定が変更されるか NCP が再起動されるまで、割り当てられた IP アドレスは再利用されません。
- ネームスペースと PCF 組織の所有者タグはオプションです。これらのタグがない場合、任意のネームスペースまたは PCF 組織に SNAT IP アドレス プールから IP アドレスを割り当てることができます。
サービスの SNAT IP アドレス プールの構成
サービスにアノテーションを追加して、サービスの SNAT IP アドレス プールを設定できます。次はその例です。
apiVersion: v1
kind: Service
metadata:
name: svc-example
annotations:
ncp/snat_pool: <external IP pool ID or name>
selector:
app: example
...
ncp/snat_pool によって指定された IP プールには、scope: ncp/owner, tag: cluster:<cluster_name> タグが必要です。
NCP によって、このサービスの SNAT ルールが設定されます。このルールの送信元 IP アドレスは、一連のバックエンド ポッドです。宛先 IP アドレスは、指定した外部 IP アドレス プールから割り当てられた SNAT IP アドレスです。NCP で SNAT ルールを設定する際にエラーが発生すると、サービスには
ncp/error.snat:
<error> のアノテーションが追加されます。想定されるエラーは次のとおりです。
- IP_POOL_NOT_FOUND - NSX Manager に SNAT IP アドレス プールがありません。
- IP_POOL_EXHAUSTED - SNAT IP アドレス プールが枯渇しています。
- IP_POOL_NOT_UNIQUE - ncp/snat_pool で指定されたプールが NSX Manager の複数のプールを参照しています。
- SNAT_POOL_ACCESS_DENY - プールの所有者タグが、割り当て要求を送信しているサービスのネームスペースと一致しません。
- SNAT_RULE_OVERLAPPED - 新しい SNAT ルールが作成されましたが、SNAT サービスのポッドが別の SNAT サービスに属しています。その結果、同一のポッドに複数の SNAT ルールが適用されています。
- POOL_ACCESS_DENIED - ncp/snat_pool で指定された IP アドレス プールに
scope: ncp/owner, tag: cluster:<cluster_name>タグがないか、プールの所有者タグが、割り当て要求を送信しているサービスの名前空間と一致しないことを示します。
次の点に注意してください。
- ncp/snat_pool で指定されたプールは、サービスを設定する前に NSX-T Data Center に配置しておく必要があります。
- NSX-T Data Center では、サービスの SNAT ルールの優先順位はプロジェクトよりも高くなります。
- ポッドに複数の SNAT ルールが設定されている場合は、1 つのルールのみが機能します。
- アノテーションを変更して NCP を再起動することで、異なる IP アドレス プールに変更できます。
ネームスペースの SNAT IP アドレス プールの構成
ネームスペースにアノテーションを追加して、ネームスペースの SNAT IP アドレス プールを設定できます。次はその例です。
apiVersion: v1
kind: Namespace
metadata:
name: ns-sample
annotations:
ncp/snat_pool: <external IP pool ID or name>
...
NCP によって、このネームスペースに SNAT ルールが設定されます。このルールの送信元 IP アドレスは、一連のバックエンド ポッドです。宛先 IP アドレスは、指定した外部 IP アドレス プールから割り当てられた SNAT IP アドレスです。NCP で SNAT ルールを設定する際にエラーが発生すると、ネームスペースには
ncp/error.snat:
<error> のアノテーションが追加されます。想定されるエラーは次のとおりです。
- IP_POOL_NOT_FOUND - NSX Manager に SNAT IP アドレス プールがありません。
- IP_POOL_EXHAUSTED - SNAT IP アドレス プールが枯渇しています。
- IP_POOL_NOT_UNIQUE - ncp/snat_pool で指定されたプールが NSX Manager の複数のプールを参照しています。
- POOL_ACCESS_DENIED - ncp/snat_pool で指定された IP アドレス プールに
scope: ncp/owner, tag: cluster:<cluster_name>タグがないか、プールの所有者タグが、割り当て要求を送信している名前空間と一致しないことを示します。
次の点に注意してください。
- アノテーションでは、SNAT IP アドレス プールを 1 個のみ指定できます。
- SNAT IP アドレス プールは、ncp.ini で設定する必要はありません。
- ncp/snat_pool によって指定された IP プールには、
scope: ncp/owner, tag: cluster:<cluster_name>タグが必要です。 - ncp/snat_pool で指定される IP アドレス プールには、名前空間
scope: ncp/owner, tag: ns:<namespace_UUID>タグも含める必要があります。 - ncp/snat_pool アノテーションが見つからない場合、ネームスペースではクラスタの SNAT IP アドレス プールを使用します。
- アノテーションを変更して NCP を再起動することで、異なる IP アドレス プールに変更できます。
PAS アプリケーションの SNAT プールの構成
NCP はデフォルトで、PAS (Pivotal Application Service) 組織用に SNAT の IP アドレスを構成します。SNAT の IP アドレス プールの情報が含まれた
manifest.xml を使用してアプリケーションを作成し、アプリケーション用に SNAT IP アドレスを設定できます。次はその例です。
applications:
- name: frontend
memory: 32M
disk_quota: 32M
buildpack: go_buildpack
env:
GOPACKAGENAME: example-apps/cats-and-dogs/frontend
NCP_SNAT_POOL: <external IP pool ID or name>
...
NCP によって、このアプリケーションに SNAT ルールが設定されます。ルールの送信元 IP アドレスは一連のインスタンスの IP アドレスで、宛先 IP アドレスは、外部 IP アドレス プールから割り当てられた SNAT の IP アドレスです。次の点に注意してください。
- NCP_SNAT_POOL で指定されたプールは、アプリケーションのプッシュ前に NSX-T Data Center に配置しておく必要があります。
- アプリケーションの SNAT ルールの方が、組織の優先順位よりも高くなります。
- アプリケーションに設定できる SNAT の IP アドレスは、1 つのみです。
- 設定を変更して NCP を再起動することで、異なる IP アドレス プールに変更できます。
PCF バージョン 3 の SNAT の設定
PCF バージョン 3 では、2 つのうち、いずれかの方法で SNAT を設定できます。
- アプリケーションを作成するときに、manifest.yml で NCP_SNAT_POOL を構成します。
たとえば、アプリケーションの名前が bread であり、 manifest.yml に次の情報が含まれているとします。
applications: - name: bread stack: cflinuxfs2 random-route: true env: NCP_SNAT_POOL: AppSnatExternalIppool processes: - type: web disk_quota: 1024M instances: 2 memory: 512M health-check-type: port - type: worker disk_quota: 1024M health-check-type: process instances: 2 memory: 256M timeout: 15次のコマンドを実行します。cf v3-push bread cf v3-apply-manifest -f manifest.yml cf v3-apps cf v3-restart bread
- cf v3-set-env コマンドを使用して NCP_SNAT_POOL を構成します。
次のコマンドを実行します(アプリケーションの名前が app3 であると仮定)。
cf v3-set-env app3 NCP_SNAT_POOL AppSnatExternalIppool (optional) cf v3-stage app3 -package-guid <package-guid> (You can get package-guid with "cf v3-packages app3".) cf v3-restart app3