Kubernetes:如何强制 kube-proxy 仅在本地主机上监听

Kubernetes:如何强制 kube-proxy 仅在本地主机上监听

在我的配置中,非常基本的配置(只有 calico 网络,还没有应用程序)我让 nginx-ingress 作为 NodePort 运行 - 绑定在端口 30080 上。此端口应该只能从本地主机访问,但 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

答案1

不确定这是否是你一直在寻找的,但是这样它就会继续听127.0.0.1:NodePort

你需要改变kube-proxy 配置图但不是bindAddress:(应该保留原样bindAddress: 0.0.0.0),默认值nodePortAddresses: null应更改为nodePortAddresses: ["127.0.0.0/8"]。必须像您将pod 粉碎["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示例本文档。唯一的更改是添加type: NodePort到服务 YAML。

现在您需要将此新配置应用于 kube-proxy。最简单的方法是删除kube-proxypod,然后daemonset.apps/kube-proxy使用新配置创建新的 pod。

原始输出:

$ 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      -                   
...                  

相关内容