定义仅允许通过网络策略仅出口到kube-apiserver的规则的最佳方法是什么?
虽然kube-apiserver有Service
资源,但没有Pods
,据我所知,这不能用标签完成。使用IP白名单,不能保证此功能可跨群集使用。这里有建议的做法吗?
最佳答案
您必须使用apiserver的IP地址。您不能使用标签。
要查找apiserver的IP地址,请运行:kubectl cluster-info
在输出中查找这样的行:Kubernetes master is running at https://<ip>
这是apiserver IP的IP地址。
网络策略应如下所示(假设apiserver IP为34.76.197.27):
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: egress-apiserver
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 34.76.197.27/32
ports:
- protocol: TCP
port: 443
The policy above applies to all pods in the namespaces it is applied to。
要选择特定的Pod,请使用需要apiserver访问的Pod的标签来编辑podSelector部分:
podSelector:
matchLabels:
app: apiserver-allowed
请记住,默认的出口策略是ALLOW ALL,这意味着其他Pod仍然可以访问apiserver。
You can change this behavior by adding a "BLOCK ALL" egress policy per namespace,但请记住不要阻止对DNS服务器和其他基本服务的访问。
For more info see "Egress and DNS (Pitfall!)" in this post。
请注意,在某些情况下(出于可伸缩性)可能有多个apiserver,在这种情况下,您将需要添加所有IP地址。
关于kubernetes - 将带有网络策略的kube-apiserver列入白名单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58790124/