GKE 拒绝声明与网络策略 + 印花布
GKE deny statement with network policy + calico
我是 运行 使用 Google Cloud 管理的集群,因此它可以选择启用 NetworkPolicy
,并且在后端使用 calico。我有问题,看起来我只能使用 api 版本 networking.k8s.io/v1
.
我正在尝试创建策略以禁用 pod 的任何内部出口 traefik,并允许任何入口 + 出口 to/from 外部网络。
使用 calico API 它看起来像这样:
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: policy-name
namespace: namespace-name
spec:
selector: label == value
types:
- Ingress
- Egress
ingress:
- action: Allow
notProtocol: UDP
destination:
ports:
- 53
- action: Allow
notProtocol: TCP
destination:
ports:
- 53
egress:
- action: Deny
protocol: UDP
destination:
ports:
- 53
- action: Deny
protocol: TCP
destination:
ports:
- 53
或以下政策的否定版本:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: policy-name
namespace: namespace-name
spec:
podSelector:
matchLabels:
label: value
policyTypes:
- Egress
egress:
- ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCP
- to:
- namespaceSelector: {}
所以我有两个问题:
1. 是否可以用 networking.k8s.io/v1
API 重现上面的规则?
2. 我能否以某种方式在托管 GKE 集群上启用 projectcalico.org/v3
API?
终于在花了 2 天后。似乎要从 API 'projectcalico.org/v3' 应用配置,您必须首先安装或部署到集群 CLI 工具 calicoctl
。然后,您可以使用 calicoctl apply -f ./policy.yml
应用您的策略,或者如果它已部署到集群,则使用别名 alias calicoctl="kubectl exec -i -n kube-system calicoctl /calicoctl -- "
+ cat ./policy.yml | calicoctl apply -f -
.
下面的工作策略将禁止出口到专用网络,并且只允许 public:
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: policy-name
namespace: namespace-name
spec:
selector: label == value
types:
- Egress
egress:
- action: Allow
protocol: UDP
destination:
ports: [53]
- action: Allow
protocol: TCP
destination:
ports: [53]
- action: Deny
destination:
nets:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
- action: Allow
我是 运行 使用 Google Cloud 管理的集群,因此它可以选择启用 NetworkPolicy
,并且在后端使用 calico。我有问题,看起来我只能使用 api 版本 networking.k8s.io/v1
.
我正在尝试创建策略以禁用 pod 的任何内部出口 traefik,并允许任何入口 + 出口 to/from 外部网络。
使用 calico API 它看起来像这样:
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: policy-name
namespace: namespace-name
spec:
selector: label == value
types:
- Ingress
- Egress
ingress:
- action: Allow
notProtocol: UDP
destination:
ports:
- 53
- action: Allow
notProtocol: TCP
destination:
ports:
- 53
egress:
- action: Deny
protocol: UDP
destination:
ports:
- 53
- action: Deny
protocol: TCP
destination:
ports:
- 53
或以下政策的否定版本:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: policy-name
namespace: namespace-name
spec:
podSelector:
matchLabels:
label: value
policyTypes:
- Egress
egress:
- ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCP
- to:
- namespaceSelector: {}
所以我有两个问题:
1. 是否可以用 networking.k8s.io/v1
API 重现上面的规则?
2. 我能否以某种方式在托管 GKE 集群上启用 projectcalico.org/v3
API?
终于在花了 2 天后。似乎要从 API 'projectcalico.org/v3' 应用配置,您必须首先安装或部署到集群 CLI 工具 calicoctl
。然后,您可以使用 calicoctl apply -f ./policy.yml
应用您的策略,或者如果它已部署到集群,则使用别名 alias calicoctl="kubectl exec -i -n kube-system calicoctl /calicoctl -- "
+ cat ./policy.yml | calicoctl apply -f -
.
下面的工作策略将禁止出口到专用网络,并且只允许 public:
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: policy-name
namespace: namespace-name
spec:
selector: label == value
types:
- Egress
egress:
- action: Allow
protocol: UDP
destination:
ports: [53]
- action: Allow
protocol: TCP
destination:
ports: [53]
- action: Deny
destination:
nets:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
- action: Allow