如何为AKS中的出口流量保留Pod IP地址?

时间:2020-04-19 03:32:47

标签: azure kubernetes

在Azure Kubernetes(AKS)中,如果pod将流量发送到群集之外,则会将其Natted到节点IP地址。例如,如果pod nettools(来自节点aks-agentpool-35359625-1)将流量发送到群集之外的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"
}

2 个答案:

答案 0 :(得分:0)

您实际上无法做到这一点,每次销毁一个Pod并创建一个新Pod时,都会为其分配一个新IP。荚是短暂的,它们的IP也是如此。

我相信要实现您想要的目标,您需要使用服务。

Kubernetes中的服务是“将运行在一组Pod上的应用程序公开为网络服务的抽象方法”。 (k8s documentation

同样,您可以通过Kubernetes为其提供的IP和端口访问您的Pod,但这不是一个好习惯,因为Pod可能会死亡,并且将创建另一个Pod(如果由Deployment / ReplicaSet控制)。新IP,您应用中的所有内容都会开始失效。

如果公开部署或Pod,则创建的服务也将具有IP,并且销毁Pod的次数无关紧要,因为您仍然可以通过Service IP访问它(当然当新的Pod启动并运行时,但我想您已经明白了。

答案 1 :(得分:0)

您可以编辑 azure-ip-masq-agent configmap 以添加您不希望它被伪装的目标私有 IP CIDR。

kubectl get pods --namespace kube-system -l "k8s-app=azure-ip-masq-agent" -o wide

kubectl describe configmap azure-ip-masq-agent-config --namespace kube-system

# Add x.x.x.x/x to the nonMasq CIDRs
kubectl edit configmap azure-ip-masq-agent-config --namespace kube-system