Назад | Перейти на главную страницу

Kubernetes: как заставить kube-proxy слушать только на localhost

В моей конфигурации очень простая (только сеть calico, приложений пока нет) у меня nginx-ingress работает как NodePort - привязка к порту 30080. Этот порт должен быть доступен только с localhost, но k8s открыл этот порт для всех, и поскольку он привязка к 0.0.0.0 теперь широко открыта.

Поэтому я хочу заставить kube-proxy привязать этот порт только к 127.0.0.1.

Я пробовал изменить configmap на nginx-ingress (адрес привязки), но не повезло.

Поскольку этот порт привязан к kube-proxy - я искал конфигурацию kube-proxy, но не повезло. Я нашел файл конфигурации yaml в / var / lib / kube-proxy, но его изменение не изменило этого.

После перезапуска подов они по-прежнему привязаны к 0.0.0.0

Я пробовал много способов из Интернета, но все равно не повезло.

Кластер был инициализирован с помощью: kubeadm init --pod-network-cidr = 10.XXX.XXX.XXX / XX --apiserver-Advertise-address = X.X.X.X

Не уверен, что это то, что вы искали, но в этом случае он будет слушать 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: null к nodePortAddresses: ["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-proxy стручок как 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      -                   
...