Rue*_*oel 1 nginx kubernetes weave
我在 kube 集群上设置出口网络策略时面临一个奇怪的问题。
基本上我希望我的 pod A 只能访问 pod B。
我有两个 Pod:
hello-k8s-deploy pod 通过 NodePort 在端口上公开 API 8080。我的 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 Code Online (Sandbox Code Playgroud)
以上政策将适用于带标签的 Podrun: nginx
规则是允许流量进入带标签的 Pod app: hello-k8s-deploy
让我们通过查看 pod nginx 和 hello-k8s-deploy 的定义来验证它
nginx:
你好-k8s-部署
正如我们所看到的,两个标签都匹配网络策略。
在我应用网络策略并再次访问 nginx 后,我希望能够以相同的方式工作并从 API 获得响应,但我收到以下错误。
请注意:
app我终于解决了这个问题,基本上我遇到的问题是could not resolve host hello-k8s-svc。这意味着 k8s 正在尝试使用该主机进行连接并通过 dns 名称(服务名称)进行解析。
由于我的 pod 只允许出口到 hello-k8s-deploy,因此它失败了,因为它还需要连接到 kube-dns 来解析 dns。因此,在应用出口之前,请确保命名空间中的 Pod 或所有 Pod 允许连接到 kube-dns 进行 DNS 解析。
修复方法只是为所有 Pod 创建一个出口资源,以在特定于 Pod 的出口配置之上连接到 kube-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
Run Code Online (Sandbox Code Playgroud)
就我而言,我标记了 kube-system 命名空间:
kubectl label namespace kube-system networking/namespace=kube-system
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3432 次 |
| 最近记录: |