特定の Kubernetes ネームスペースまたは TAS 組織への SNAT IP アドレス プールの制限
次のタグを IP アドレス プールに追加することで、SNAT の IP アドレス プールから IP アドレスを割り当てる Kubernetes のネームスペースまたは TAS 組織を指定できます。
- Kubernetes ネームスペースの場合:
scope: ncp/owner, tag: ns:<namespace_UUID>
- TAS 組織の場合:
scope: ncp/owner, tag: org:<org_UUID>
ネームスペースまたは組織の UUID は、次のいずれかのコマンドで取得できます。
kubectl get ns -o yaml cf org <org_name> --guid
次の点に注意してください。
- 各タグには 1 つの UUID を指定する必要があります。同じプールに対して複数のタグを作成できます。
- 古いタグ ベースで一部のネームスペースまたは組織に IP アドレスが割り当てられた後にタグを変更すると、Kubernetes サービスまたは TAS アプリケーションの SNAT 構成が変更されるか NCP が再起動されるまで、割り当てられた IP アドレスは再利用されません。
- ネームスペースと TAS 組織の所有者タグはオプションです。これらのタグがない場合、任意のネームスペースまたは TAS 組織に 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_RULE_OVERLAPPED - 新しい SNAT ルールが作成されましたが、SNAT サービスのポッドが別の SNAT サービスに属しています。その結果、同一のポッドに複数の SNAT ルールが適用されています。
- POOL_ACCESS_DENIED - ncp/snat_pool で指定された IP アドレス プールに
scope: ncp/owner, tag: cluster:<cluster_name>
タグがないか、プールの所有者タグが、割り当て要求を送信しているサービスのネームスペースと一致しないことを示します。エラーを修正した後は、NCP を再起動するか、ncp/snat_pool 注釈を削除してから再度追加する必要があります。
次の点に注意してください。
- ncp/snat_pool で指定されたプールは、サービスを構成する前に NSX に配置しておく必要があります。
- NSX では、サービスの 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>
タグがないか、プールの所有者タグが、割り当て要求を送信しているネームスペースと一致しないことを示します。エラーを修正した後は、NCP を再起動するか、ncp/snat_pool 注釈を削除してから再度追加する必要があります。
次の点に注意してください。
- アノテーションでは、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 アドレス プールに変更できます。
サービスの SNAT IP アドレスの構成
サービスに注釈を追加して、サービスの SNAT IP アドレスを構成できます。次はその例です。
apiVersion: v1 kind: Service metadata: name: svc-example annotations: ncp/static_snat_ip: "1.2.3.4" ...
注釈
ncp/snat_pool も指定されている場合は、SNAT IP アドレスが、指定された SNAT アドレス プールに含まれている必要があります。それ以外の場合は、
ncp.ini で指定された外部 IP プールに含まれている必要があります。エラーがない場合、NCP は、このサービスの注釈付きの SNAT IP アドレスを使用して、SNAT ルールを作成または更新します。サービスでは、SNAT ルールの構成状態に
ncp/snat_ip_status の注釈が付きます。可能な値は次のとおりです。
- IP_ALLOCATED_SUCCESSFULLY
- IP_ALREADY_ALLOCATED - IP アドレスはすでに割り当てられています。
- IP_NOT_IN_POOL - IP アドレスは SNAT IP プールに含まれていません。
- IP_POOL_EXHAUSTED - SNAT IP アドレス プールが枯渇しています。
- SNAT_PROCESS_FAILED - 不明なエラーが発生しました。
ネームスペースの SNAT IP アドレスの構成
ネームスペースに注釈を追加して、ネームスペースの SNAT IP アドレスを構成できます。次はその例です。
apiVersion: v1 kind: Namespace metadata: name: svc-example annotations: ncp/static_snat_ip: "1.2.3.4" ...
注釈
ncp/snat_pool も指定されている場合は、SNAT IP アドレスが、指定された SNAT アドレス プールに含まれている必要があります。それ以外の場合は、
ncp.ini で指定された外部 IP プールに含まれている必要があります。エラーがない場合、NCP は、このネームスペースの注釈付きの SNAT IP アドレスを使用して、SNAT ルールを作成または更新します。ネームスペースでは、SNAT ルールの構成状態に
ncp/snat_ip_status の注釈が付きます。可能な値は次のとおりです。
- IP_ALLOCATED_SUCCESSFULLY
- IP_ALREADY_ALLOCATED - IP アドレスはすでに割り当てられています。
- IP_NOT_IN_POOL - IP アドレスは SNAT IP プールに含まれていません。
- IP_NOT_REALIZED - NSX でエラーが発生しました。
- IP_POOL_EXHAUSTED - SNAT IP アドレス プールが枯渇しています。
- SNAT_PROCESS_FAILED - 不明なエラーが発生しました。
TAS アプリケーションの SNAT プールの構成
NCP はデフォルトで、TAS (Tanzu 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 に配置しておく必要があります。
- アプリケーションの SNAT ルールの方が、組織の優先順位よりも高くなります。
- アプリケーションに構成できる SNAT の IP アドレスは、1 つのみです。
- 構成を変更してアプリケーションに再度プッシュすることで、異なる IP アドレス プールに変更できます。
TAS バージョン 3 の SNAT の構成
TAS バージョン 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
TAS 組織の SNAT IP プールまたは IP アドレスの構成
TAS 組織の SNAT IP プールまたは IP アドレスを構成するには、次の注釈を使用します。
- ncp_snat_pool - プールが存在し、
scope: ncp/owner, tag: cluster:<cluster_name>
タグが付いている必要があります。 - ncp_snat_ip - IP プール内の特定のアドレス。
次の点に注意してください。
- ncp_snat_pool と ncp_snat_ip の両方が指定されている場合、SNAT IP アドレスは、指定された SNAT アドレス プールに含まれている必要があります。
- ncp_snat_ip のみが指定されている場合、SNAT IP アドレスは ncp.ini で指定された外部 IP プールに含まれている必要があります。
- ncp_snat_pool のみが指定されている場合、SNAT IP アドレスは、指定されたプールから割り当てられます。
cf curl コマンドを使用して、組織の SNAT IP アドレスを構成できます。次はその例です。
cf curl v3/organizations/<org-guid> -X PATCH -d '{"metadata": {"annotations": {"ncp_snat_pool": "ann-ip-pool", "ncp_snat_ip": "1.2.3.4"}}}'
次のコマンドを使用して
org-guid を取得できます。
cf org <org-name> --guid
次のコマンドで、
ncp_snat_ip 注釈を削除できます。
cf curl v3/organizations/<org-guid> -X PATCH -d '{"metadata": {"annotations": {"ncp_snat_ip": null}}}'
NSX Manager ユーザー インターフェイスに移動して、SNAT ルールが正常に作成されているかどうかを確認できます。エラーを確認するには、NCP ログを参照します。
NCP ログに POOL_ACCESS_DENIED エラーがある場合、ncp_snat_pool で指定された IP プールに scope: ncp/owner, tag: cluster:<cluster_name>
タグがないか、プールの所有者タグが、割り当て要求を送信している組織と一致しないことを示します。エラーを修正した後は、NCP を再起動するか、ncp_snat_pool 注釈を削除してから再度追加する必要があります。