Как сохранить IP-адрес модуля для исходящего трафика c в AKS? - PullRequest
0 голосов
/ 19 апреля 2020

In Azure Kubernetes (AKS), если модуль, отправляющий трафик c за пределы кластера, получает Natted на IP-адрес узла. Например, если pod nettools (из узла aks-agentpool-35359625-1) отправляет трафик c в Azure адресатов, находящихся вне кластера, он получает значение 10.240.0.35. Есть ли способ сохранить исходный источник (10.240.0.48)?

Кластер работает с сетевым плагином azure и прозрачным сетевым режимом

/AKS/cluster1 $ kubectl get nodes -o wide 
kubectl get pods -o wide
NAME                       STATUS   ROLES   AGE     VERSION    INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
aks-agentpool-35359625-0   Ready    agent   6h13m   v1.15.10   10.240.0.66   <none>        Ubuntu 16.04.6 LTS   4.15.0-1071-azure   docker://3.0.10+azure
aks-agentpool-35359625-1   Ready    agent   6h13m   v1.15.10   10.240.0.35   <none>        Ubuntu 16.04.6 LTS   4.15.0-1071-azure   docker://3.0.10+azure
aks-agentpool-35359625-2   Ready    agent   6h13m   v1.15.10   10.240.0.4    <none>        Ubuntu 16.04.6 LTS   4.15.0-1071-azure   docker://3.0.10+azure
/AKS/cluster1 $ kubectl get pods -o wide
NAME       READY   STATUS    RESTARTS   AGE   IP            NODE                       NOMINATED NODE   READINESS GATES
nettools   1/1     Running   0          21m   10.240.0.48   aks-agentpool-35359625-1   <none>           <none>

/AKS/cluster1 $ az aks show -g $rg --name $cluster --query "networkProfile"
{
  "dnsServiceIp": "10.0.0.10",
  "dockerBridgeCidr": "172.17.0.1/16",
  "loadBalancerProfile": null,
  "loadBalancerSku": "Basic",
  "networkMode": "transparent",
  "networkPlugin": "azure",
  "networkPolicy": null,
  "outboundType": "UDR",
  "podCidr": null,
  "serviceCidr": "10.0.0.0/16"
}

1 Ответ

0 голосов
/ 19 апреля 2020

Вы на самом деле не можете этого сделать, каждый раз, когда Pod уничтожается и создается новый Pod, ему назначается новый IP. Модули эфемерны и их IP-адреса тоже.

Я считаю, что для достижения того, что вы ищете, вам нужно использовать Службы.

Службы в Kubernetes - это «абстрактный способ показать работающее приложение на наборе стручков в качестве сетевого сервиса. " ( документация k8s )

Опять же, вы можете получить доступ к вашему модулю по его IP-адресу и порту, которые ему предоставил Kubernetes, но это не очень хорошая практика, так как модули могут делать ie и будет создан другой (если он управляется Deployment / ReplicaSet) с новым IP, и все в вашем приложении начнет давать сбой.

Если вы выставите свой Deployment или Pod, созданная служба будет иметь IP и не имеет значения, сколько раз ваш Pod уничтожается, потому что вы все равно сможете получить к нему доступ через Service IP (конечно, когда новый Pod запущен и работает, но я думаю, что вы поняли).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...