このページでは、Google Distributed Cloud(GDC)エアギャップでプロジェクト内トラフィック ネットワーク ポリシーを構成する手順について説明します。
プロジェクト ネットワーク ポリシーは、上り(内向き)ルールまたは下り(外向き)ルールのいずれかを定義します。プロジェクト内、プロジェクト間、外部 IP アドレスへの通信を許可するポリシーを定義できます。
デフォルトでは、これらのポリシーはすべてのゾーンにグローバルに適用されます。GDC ユニバースのグローバル リソースの詳細については、マルチゾーンの概要をご覧ください。
単一ゾーン内でプロジェクト内トラフィックの適用が必要な場合は、単一ゾーンのワークロード レベルのプロジェクト内ポリシーを作成するをご覧ください。
始める前に
プロジェクト内トラフィック ネットワーク ポリシーを構成するには、次のものが必要です。
- 必要な ID とアクセスロール。特定のプロジェクトのポリシーを管理するには、
project-networkpolicy-admin
ロールが必要です。すべてのゾーンにまたがるポリシーを管理する必要があるマルチゾーン環境では、global-project-networkpolicy-admin
ロールが必要です。詳細については、事前定義ロールとアクセスを準備するをご覧ください。 - 既存のプロジェクト。詳細については、プロジェクトを作成するをご覧ください。
プロジェクト内ポリシーを作成する
プロジェクト内のトラフィックの場合、GDC はデフォルトで、事前定義されたプロジェクト ネットワーク ポリシー(プロジェクト内ポリシー)を各プロジェクトに適用します。デフォルトでは、プロジェクト Namespace のワークロードは、外部リソースに何も公開せずに相互に通信できます。
デフォルトでは下り(外向き)ポリシーがないため、プロジェクト内のすべてのトラフィックでアウトバウンド トラフィックが許可されます。ただし、単一の下り(外向き)ポリシーを設定すると、ポリシーで指定されたトラフィックのみが許可されます。
内向きのプロジェクト内ポリシーを作成する
プロジェクトを作成すると、プロジェクト内の通信を可能にするデフォルトのベース ProjectNetworkPolicy
リソースが暗黙的に作成されます。このポリシーでは、同じプロジェクト内の他のワークロードからのインバウンド トラフィックが許可されます。
デフォルト ポリシーは削除できますが、削除すると、プロジェクト内のすべてのサービスとワークロードでプロジェクト内の通信が拒否されることに注意してください。ポリシーを削除するには、kubectl delete
コマンドを使用します。
kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
次のマニフェストを適用すると、デフォルト ポリシーを元に戻すことができます。
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT
name: base-policy-allow-intra-project-traffic
spec:
policyType: Ingress
ingress:
- from:
- projectSelector:
projects:
matchNames:
- PROJECT
EOF
次のように置き換えます。
GLOBAL_API_SERVER
: グローバル API サーバーの kubeconfig パス。詳細については、グローバル API サーバーとゾーン API サーバーをご覧ください。API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインで詳細を確認してください。PROJECT
: プロジェクトの名前。
外向き(下り)プロジェクト内ポリシーを作成する
データ漏洩防止を無効にして、外部リソースへのアクセスを禁止するなど、ProjectNetworkPolicy
下り(外向き)ポリシーをプロジェクトに適用する場合は、次の必須ポリシーを使用して、プロジェクト内のアウトバウンド トラフィックを許可します。
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT
name: allow-intra-project-outbound-traffic
spec:
policyType: Egress
egress:
- to:
- projectSelector:
projects:
matchNames:
- PROJECT
EOF
次のように置き換えます。
GLOBAL_API_SERVER
: グローバル API サーバーの kubeconfig パス。詳細については、グローバル API サーバーとゾーン API サーバーをご覧ください。API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインで詳細を確認してください。PROJECT
: プロジェクトの名前。
ワークロード レベルのプロジェクト内ポリシーを作成する
ワークロード単位のネットワーク ポリシーを使用すると、プロジェクト内の個々のワークロード間の通信をきめ細かく制御できます。この粒度により、ネットワーク アクセスをより厳密に制御できるため、セキュリティとリソースの使用率が向上します。
内向きワークロード レベルのプロジェクト内ポリシーを作成する
プロジェクトを作成すると、すべてのワークロード間のプロジェクト内通信を可能にするデフォルトのベース ProjectNetworkPolicy
リソースが暗黙的に作成されます。このポリシーでは、同じプロジェクト内の他のワークロードからのインバウンド トラフィックが許可されます。
上り(内向き)ワークロード レベルのプロジェクト内ポリシーを作成するには、まずデフォルトのベースポリシーを削除する必要があります。そうしないと、予期しない動作が発生する可能性があります。
デフォルトのベースポリシーを削除するには、次のコマンドを実行します。
kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
上り(内向き)のワークロード レベルのプロジェクト内ポリシーを作成するには、次のカスタム リソースを作成して適用します。
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT name: allow-intra-project-inbound-traffic-from-target-to-subject spec: policyType: Ingress subject: subjectType: UserWorkload workloadSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE ingress: - from: - projectSelector: projects: matchNames: - PROJECT workloads: matchLabels: TARGET_LABEL_KEY: TARGET_LABEL_VALUE EOF
次のように置き換えます。
GLOBAL_API_SERVER
: グローバル API サーバーの kubeconfig パス。詳細については、グローバル API サーバーとゾーン API サーバーをご覧ください。API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインで詳細を確認してください。PROJECT
: プロジェクトの名前。SUBJECT_LABEL_KEY
: ソース ワークロードの選択に使用されるラベルのキー。例:app
、tier
、またはrole
SUBJECT_LABEL_VALUE
:SUBJECT_LABEL_KEY
に関連付けられた値。許可されたトラフィックの送信元となるワークロードを指定します。たとえば、SUBJECT_LABEL_KEY
がapp
で、SUBJECT_LABEL_VALUE
がbackend
の場合、ラベルapp: backend
のワークロードがトラフィック ソースになります。TARGET_LABEL_KEY
: 宛先ワークロードの選択に使用されるラベルのキー。TARGET_LABEL_VALUE
:TARGET_LABEL_KEY
に関連付けられた値。許可されたトラフィックの宛先となるワークロードを指定します。
下り(外向き)ワークロード レベルのプロジェクト内ポリシーを作成する
外向きワークロード レベルのプロジェクト内ポリシーを作成するには、次のカスタム リソースを作成して適用します。
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT name: allow-intra-project-outbound-traffic-to-subject-from-target spec: policyType: Egress subject: subjectType: UserWorkload workloadSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE egress: - to: - projectSelector: projects: matchNames: - PROJECT workloads: matchLabels: TARGET_LABEL_KEY: TARGET_LABEL_VALUE EOF
次のように置き換えます。
GLOBAL_API_SERVER
: グローバル API サーバーの kubeconfig パス。詳細については、グローバル API サーバーとゾーン API サーバーをご覧ください。API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインで詳細を確認してください。PROJECT
: プロジェクトの名前。SUBJECT_LABEL_KEY
: ソース ワークロードの選択に使用されるラベルのキー。例:app
、tier
、またはrole
SUBJECT_LABEL_VALUE
:SUBJECT_LABEL_KEY
に関連付けられた値。許可されたトラフィックの送信元となるワークロードを指定します。たとえば、SUBJECT_LABEL_KEY
がapp
で、SUBJECT_LABEL_VALUE
がbackend
の場合、ラベルapp: backend
のワークロードがトラフィック ソースになります。TARGET_LABEL_KEY
: 宛先ワークロードの選択に使用されるラベルのキー。TARGET_LABEL_VALUE
:TARGET_LABEL_KEY
に関連付けられた値。許可されたトラフィックの宛先となるワークロードを指定します。
単一ゾーンのワークロード レベルのプロジェクト内ポリシーを作成する
ワークロード単位のネットワーク ポリシーは、単一のゾーンに沿って PNP を適用できます。特定のラベルを単一ゾーン内のワークロードに追加すると、そのゾーンのプロジェクト内または異なるプロジェクト内の個々のワークロード間の通信を制御できます。
単一ゾーンの内向きワークロード レベルのプロジェクト内ポリシーを作成する
プロジェクトを作成すると、すべてのワークロード間のプロジェクト内通信を可能にするデフォルトのベース ProjectNetworkPolicy
リソースが暗黙的に作成されます。このポリシーでは、同じプロジェクト内の他のワークロードからのインバウンド トラフィックが許可されます。
単一ゾーンのイングレステワークロード レベルのプロジェクト内ポリシーを作成するには、まずデフォルトの基本ポリシーを削除する必要があります。そうしないと、予期しない動作が発生する可能性があります。
デフォルトのベースポリシーを削除するには、次のコマンドを実行します。
kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
単一ゾーンの Ingress ワークロード レベルのプロジェクト内トラフィック ネットワーク ポリシーを作成するには、次のカスタム リソースを作成して適用します。
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT name: allow-single-zone-intra-project-inbound-traffic-from-target-to-subject spec: policyType: Ingress subject: subjectType: UserWorkload workloadSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE ingress: - from: - projectSelector: projects: matchNames: - PROJECT workloads: matchLabels: TARGET_LABEL_KEY: TARGET_LABEL_VALUE ZONE_TARGET_LABEL_KEY: ZONE_TARGET_LABEL_VALUE EOF
次のように置き換えます。
GLOBAL_API_SERVER
: グローバル API サーバーの kubeconfig パス。詳細については、グローバル API サーバーとゾーン API サーバーをご覧ください。API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインで詳細を確認してください。PROJECT
: プロジェクトの名前。SUBJECT_LABEL_KEY
: ソース ワークロードの選択に使用されるラベルのキー。例:app
、tier
、またはrole
SUBJECT_LABEL_VALUE
:SUBJECT_LABEL_KEY
に関連付けられた値。許可されたトラフィックの送信元となるワークロードを指定します。たとえば、SUBJECT_LABEL_KEY
がapp
で、SUBJECT_LABEL_VALUE
がbackend
の場合、ラベルapp: backend
のワークロードがトラフィック ソースになります。TARGET_LABEL_KEY
: 宛先ワークロードの選択に使用されるラベルのキー。TARGET_LABEL_VALUE
:TARGET_LABEL_KEY
に関連付けられた値。許可されたトラフィックの宛先となるワークロードを指定します。ZONE_SUBJECT_LABEL_KEY
: ソースゾーンの選択に使用されるラベルのキー。例:zone
、またはregion
。ZONE_SUBJECT_LABEL_VALUE
:ZONE_SUBJECT_LABEL_KEY
に関連付けられた値。許可されたトラフィックの送信元ゾーンを指定します。たとえば、ZONE_SUBJECT_LABEL_KEY
がzone
で、ZONE_SUBJECT_LABEL_VALUE
がus-central1-a
の場合、ラベルzone: us-central1-a
のワークロードがトラフィック ソースになります。ZONE_TARGET_LABEL_KEY
: 宛先ゾーンの選択に使用されるラベルのキー。ZONE_TARGET_LABEL_VALUE
:ZONE_TARGET_LABEL_KEY
に関連付けられた値。許可されたトラフィックの宛先となるゾーンを指定します。
単一ゾーンの下り(外向き)ワークロード レベルのプロジェクト内ポリシーを作成する
単一ゾーンの外部送信ワークロード レベルのプロジェクト内ポリシーを作成するには、次のカスタム リソースを作成して適用します。
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT name: allow-single-zone-intra-project-outbound-traffic-to-subject-from-target spec: policyType: Egress subject: subjectType: UserWorkload workloadSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE egress: - to: - projectSelector: projects: matchNames: - PROJECT workloads: matchLabels: TARGET_LABEL_KEY: TARGET_LABEL_VALUE ZONE_TARGET_LABEL_KEY: ZONE_TARGET_LABEL_VALUE EOF
次のように置き換えます。
GLOBAL_API_SERVER
: グローバル API サーバーの kubeconfig パス。詳細については、グローバル API サーバーとゾーン API サーバーをご覧ください。API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインで詳細を確認してください。PROJECT
: プロジェクトの名前。SUBJECT_LABEL_KEY
: ソース ワークロードの選択に使用されるラベルのキー。例:app
、tier
、またはrole
SUBJECT_LABEL_VALUE
:SUBJECT_LABEL_KEY
に関連付けられた値。許可されたトラフィックの送信元となるワークロードを指定します。たとえば、SUBJECT_LABEL_KEY
がapp
で、SUBJECT_LABEL_VALUE
がbackend
の場合、ラベルapp: backend
のワークロードがトラフィック ソースになります。TARGET_LABEL_KEY
: 宛先ワークロードの選択に使用されるラベルのキー。TARGET_LABEL_VALUE
:TARGET_LABEL_KEY
に関連付けられた値。許可されたトラフィックの宛先となるワークロードを指定します。ZONE_SUBJECT_LABEL_KEY
: ソースゾーンの選択に使用されるラベルのキー。例:zone
、またはregion
。ZONE_SUBJECT_LABEL_VALUE
:ZONE_SUBJECT_LABEL_KEY
に関連付けられた値。許可されたトラフィックの送信元ゾーンを指定します。たとえば、ZONE_SUBJECT_LABEL_KEY
がzone
で、ZONE_SUBJECT_LABEL_VALUE
がus-central1-a
の場合、ラベルzone: us-central1-a
のワークロードがトラフィック ソースになります。ZONE_TARGET_LABEL_KEY
: 宛先ゾーンの選択に使用されるラベルのキー。ZONE_TARGET_LABEL_VALUE
:ZONE_TARGET_LABEL_KEY
に関連付けられた値。許可されたトラフィックの宛先となるゾーンを指定します。