Ubuntu

Kubernetes:如何強制 kube-proxy 僅在 localhost 上偵聽

  • January 26, 2022

在我的配置中,非常基本的一個(只有 calico 網路,還沒有應用程序)我有 nginx-ingress 作為 NodePort 執行 - 綁定在埠 30080 上。這個埠應該只能從 localhost 訪問,但是 k8s 為每個人打開了這個埠,因為它是在 0.0.0.0 上綁定它現在已經完全開放。

所以我想強制 kube-proxy 僅將此埠綁定到 127.0.0.1。

我嘗試將 configmap 修改為 nginx-ingress (bind-address) 但沒有運氣。

由於此埠連接到 kube-proxy - 我一直在尋找 kube-proxy 配置,但一點運氣都沒有。我在 /var/lib/kube-proxy 中找到了 yaml 配置文件,但修改它並沒有改變這一點。

重新啟動 pod 後,它們仍然綁定到 0.0.0.0

我從網際網路上嘗試了很多方法,但仍然沒有運氣。

集群初始化為:kubeadm init –pod-network-cidr=10.XXX.XXX.XXX/XX –apiserver-advertise-address=XXXX

不確定這是否是您一直在尋找的,但是通過這種方式,它會繼續收聽127.0.0.1:NodePort

您需要更改kube-proxy configmap但不需要bindAddress:(它應該保持原樣bindAddress: 0.0.0.0)並且預設值nodePortAddresses: null應該更改為nodePortAddresses: ["127.0.0.0/8"]. 就["127.0.0.0/8"]好像你會改變只是為了127.0.0.1/8 kube-proxy豆莢會粉碎。

使用更改nodePortAddresses: nullnodePortAddresses: ["127.0.0.0/8"]保存:wq。預設情況下edit將在VI文本編輯器中打開。

$ kubectl edit cm kube-proxy -n kube-system
configmap/kube-proxy edited

如果你想使用 nano 作為文本編輯器,你必須使用KUBE_EDITOR="nano" kubectl edit cm kube-proxy -n kube-system.

作為我Nginx deployment這個文件中使用的例子。只有 chage 被添加type: NodePort到服務 YAML。

現在您需要將此新配置應用於 kube-proxy。最簡單的方法是刪除kube-proxypod,因為daemonset.apps/kube-proxy將使用新配置創建新的。

原始輸出:

$ kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        19m
my-nginx     NodePort    10.109.237.94   <none>        80:31672/TCP   24s
$ netstat -plnt
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:31672           0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      -                   
...                

更改後的輸出nodePortAddresses:

$ kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        33m
my-nginx     NodePort    10.96.27.244   <none>        80:30679/TCP   2m40s
$ netstat -plnt
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:30679         0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      -                   
...                  

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