我正在使用Google Cloud运行托管群集,因此它可以选择启用NetworkPolicy
,并且在后端使用calico。我遇到了问题,看来我只能使用api版本networking.k8s.io/v1
。
我正在尝试创建一个策略,该策略将禁用来自pod的任何内部出口traefik,并允许进出外部网络的任何入口+出口。
使用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: {}
所以我有2个问题:
1.是否可以使用networking.k8s.io/v1
API重现以上规则?
2.我可以通过某种方式在托管GKE群集上启用projectcalico.org/v3
API吗?
答案 0 :(得分:1)
最后花费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 -
。
以下是有效的政策,该政策将禁止向专用网络的出口,并且仅允许公共:
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