Redhat

Kubernetes-calico 服務只能從部署 pod 的地方訪問

  • July 8, 2020

我在過去 3 天都面臨這個問題,但仍然無法弄清楚為什麼我無法使用 NodePort 服務類型訪問 k8s 集群之外的 NodePort。

基本上我已經在 rhel8 中建立了一個 3 節點集群,我按照本教程https://www.tecmint.com/install-a-kubernetes-cluster-on-centos-8/但在 weavenet 網路中遇到了一些問題,這就是為什麼我’我又做了一次,但這次是和印花布一起做的。

這是我的 3 節點集群: 在此處輸入圖像描述

我為網路外掛安裝了 calico 最新版本,你可以看到所有 kube pod 都執行良好。

在此處輸入圖像描述

現在這是我的部署文件

apiVersion: apps/v1
kind: Deployment
metadata:
   name: hello-k8s
spec:
   selector:
    matchLabels:
       app: hello-k8s
   replicas: 1
   template:
     metadata:
       labels:
         app: hello-k8s
     spec:
       containers:
        - name: spring-boot
          image: fuzzy28/hello-k8s:v3
          ports:
           - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
   name: hello-k8s-svc
spec:
   selector:
     app: hello-k8s
   ports:
     - protocol: TCP
       port: 8080
       targetPort: 8080
   type: NodePort

我部署了它,它在下面突出顯示的節點中執行良好。

在此處輸入圖像描述

如果我們檢查服務,它執行在 32020 埠。

我使用以下命令打開了所有節點中的埠

firewall-cmd --permanent --add-port=30000-32767/tcp

在此處輸入圖像描述

所以關鍵時刻,在 k8s 集群外的瀏覽器上檢查後,它就無法訪問了。我在所有節點的 IP 地址中都試過了,但無法訪問。 在此處輸入圖像描述

奇怪的是,該 URL 只能在部署它的 pod 內部訪問。

在此處輸入圖像描述

我真的不明白這裡發生了什麼,這是我的網路介面,以防你想看。

在此處輸入圖像描述

我花了一段時間才找出問題的最可能原因。事實證明,由於 RHEL 8 版本iptables已被棄用,並且nftables是它的新替代品。

38.2. 何時使用 firewalld、nftables 或 iptables

  • iptables:該 iptables 實用程序在 Red Hat Enterprise Linux 8 中已棄用。請改用 nftables

Kubernetes 網路使用iptables 並且不兼容nftables.

我試圖通過禁用firewalldand來解決您的問題nftables,並強制 rhel8 改用 iptables,但它仍然沒有解決集群中的所有連接問題。

似乎目前您能做的最好的事情就是使用舊的 rhel 版本。如果您還有其他問題,請告訴我。

引用自:https://serverfault.com/questions/1024350