繁体   English   中英

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

[英]How to preserve pod IP address for egress traffic in AKS?

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

你实际上不能这样做,每次销毁一个 Pod 并创建一个新 Pod 时,都会为其分配一个新的 IP。 Pod 是短暂的,它们的 IP 也是如此。

我相信要实现您正在寻找的东西,您需要使用服务。

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

同样,您可以通过其ZA12A3079E14CED46E6BA52B8A90B21AZ访问POD和Z30136395F0187979792198317C11831EA4Z的端口和端口。你的应用程序上的一切都将开始失败。

如果您公开您的 Deployment 或 Pod,则创建的 Service 也将具有 IP,并且无论您的 Pod 被销毁多少次,因为您仍然可以通过 Service IP 访问它(当然,当新的Pod 已启动并正在运行,但我认为您明白了)。

您可以编辑 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM