【发布时间】:2020-11-15 04:55:05
【问题描述】:
在我的 kube 集群上设置出口网络策略时遇到了一个奇怪的问题。
基本上我希望我的 pod A 只能访问 pod B。
我有两个豆荚:
- hello-k8s-deploy
- nginx
hello-k8s-deploy pod 通过 NodePort 在端口 8080 上公开一个 API。
我的 nginx pod 只是一个访问 API 的图像。
让我们尝试登录 nginx pod 并访问 hello-k8s-deploy pod 公开的 API。
上图显示 API 响应以 Hello K8s! 开头的消息
现在让我们在我的 nginx pod 上应用网络策略,这样它就只能访问这个 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 的 pod
规则是允许流量到标签为app: hello-k8s-deploy的pod
让我们通过查看 Pod nginx 和 hello-k8s-deploy 的定义来验证它
nginx:
hello-k8s-deploy
我们可以看到两个标签都匹配网络政策。
在我应用网络策略并再次访问 nginx 后,我希望能正常工作并从 API 获得响应,但我收到以下错误。
请注意:
- 所有资源都在同一个命名空间
app - 我的网络插件是 weave-net,它根据文档支持网络策略。
- 我什至尝试指定命名空间选择器并添加端口 8080。
【问题讨论】:
标签: nginx kubernetes weave