Я пытаюсь воспроизвести тот же эксперимент, который описан вздесь. По сути, эксперимент заключается в выполнении HTTP-запроса из pod внутри кластера к другому pod внутри того же кластера, но я не могу получить тот же результат. У меня есть pod со следующим IP: 10.1.97.85/24, в том же кластере другого pod, в котором есть приложение, отправляющее HTTP-ответ с IP-адресом клиента, отправившего запрос. Как было сказаноздесь, верно следующее:
Пакеты, отправляемые в ClusterIP изнутри кластера, никогда не передаются через NAT, если вы используете kube-proxy в режиме iptables.
Я выполнил тест, указанный выше, но когда я выполняю запрос с модуля с IP-адресом 10.1.97.85/24, я получаю HTTP-ответ, в котором говорится, что запрос был отправлен модулем с IP-адресом 10.1.97.1. Я хотел бы знать, что происходит.
Я провел описанные выше эксперименты с microk8s и kubernetes на версии 1.17.9, и оба модуля находятся на одних и тех же узлах, поскольку у меня всего один узел.
Я создал свое развертывание с помощью команды:
microk8s.kubectl create deployment source-ip-app --image=k8s.gcr.io/echoserver:1.4
Приведенная выше команда создала модуль с приложением, которое будет отображать client_address в HTTP-ответе.
Я раскрыл вышеуказанное развертывание с помощью команды:
microk8s.kubectl expose deployment source-ip-app --name=clusterip --port=80 --target-port=8080
Я запустил еще один модуль с помощью команды:
microk8s.kubectl run busybox -it --image=busybox --restart=Never --rm
И внутри созданного выше модуля я выполнил команду:
ip addr
С помощью указанной выше команды я получил IP-адрес: 10.1.97.85, но когда я выполнил wget для службы, я получил обратно IP-адрес: 10.1.97.85