![](/img/trans.png)
[英]Kubernetes + Metallb: Nginx pod not receiving traffic with Local traffic Policy, Layer 2 mode
[英]Kubernetes Egress Network Policy is not working on a pod selected
在我的 kube 集群上設置出口網絡策略時,我遇到了一個奇怪的問題。
基本上我希望我的 pod A 只能訪問 pod B。
我有兩個豆莢:
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
上述策略將應用於具有 label 的 pod run: nginx
規則是允許使用 label 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。 因此,在應用 egress 之前,請確保命名空間中的 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
在我的例子中,我標記了 kube-system 命名空間:
kubectl label namespace kube-system networking/namespace=kube-system
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.