在我的kube集群建立出口网络策略方面,我面临着一个奇怪的问题。
基本上我只想让我的舱A进入B舱。
我有两个吊舱:
Hello-K8s部署的pod通过NodePort在端口NodePort上公开一个API。我的nginx只是一个访问API的映像。
因此,让我们尝试登录到nginx,并访问hello-K8s-Deploypod公开的API。

上面显示API返回消息,消息以Hello K8s!开头。
现在,让我们在我的nginx上应用网络策略,以便它只能访问这个API,而不是其他API。
网络策略:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: app
spec:
podSelector:
matchLabels:
run: nginx
egress:
- to:
- podSelector:
matchLabels:
app: hello-k8s-deploy
policyTypes:
- Egress以上政策将适用于标签为run: nginx的吊舱。
规则是允许使用标签app: hello-k8s-deploy的通信量结荚。
让我们通过查看pods nginx和hello-k8s-部署的定义来验证它。
nginx:

hello-k8s-deploy

正如我们所看到的,两个标签都与网络策略相匹配。
在我应用网络策略并再次访问nginx之后,我希望同样地工作并从API获得响应,但是我得到了下面的错误。

注意到:
所有资源都在同一个名称空间中,app
发布于 2020-07-25 15:08:25
我最终解决了这个问题,基本上我遇到的问题是could not resolve host hello-k8s-svc。这意味着k8s试图使用此主机进行连接,并通过dns名称(服务名称)进行解析。
由于我的吊舱只允许出口到hello-K8-部署,它失败了,因为它还需要连接到kube来解析dns。因此,在应用出口之前,请确保名称空间中的荚或所有荚都允许连接到kube以进行dns解析。
修复是简单地创建一个出口资源到所有豆荚,以连接到库-dns之上的荚特定的出口配置。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all-egress
spec:
podSelector: {}
egress:
- to:
- namespaceSelector:
matchLabels:
networking/namespace: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- protocol: TCP
port: 53
- protocol: UDP
port: 53
policyTypes:
- Egress在我的例子中,我标记了kube-system命名空间:
kubectl label namespace kube-system networking/namespace=kube-systemhttps://stackoverflow.com/questions/63088568
复制相似问题