我在google cloud(GKE)中运行k8s群集,在aws(RDS)中运行MySQL服务器。 Pod需要连接到RDS,它只允许来自某些IP的连接。如何配置传出流量以获得静态IP?
答案 0 :(得分:12)
我从Pod连接到sftp服务器时遇到了同样的问题。 要解决此问题,首先需要创建外部IP地址:
gcloud compute addresses create {{ EXT_ADDRESS_NAME }} --region {{ REGION }}
然后,我想您的pod已分配给默认池节点集群。 提取默认池节点名称:
gcloud compute instances list | awk '{ print $1 }' | grep default-pool
删除vm实例的默认外部IP:
gcloud compute instances delete-access-config {{ VM_DEFAULT-POOL_INSTANCE }} --access-config-name external-nat
添加之前创建的外部静态IP:
gcloud compute instances add-access-config {{ VM_DEFAULT-POOL_INSTANCE }} --access-config-name external-nat --address {{ EXT_ADDRESS_IP }}
如果您的Pod没有连接到默认池节点,请不要忘记使用nodeSelector选择它:
nodeSelector:
cloud.google.com/gke-nodepool: {{ NODE_NAME }}
答案 1 :(得分:5)
我做了一些研究,发现了一些事情。
我们正在寻找的东西称为“出口IP”或NAT-as-a-Service,它们在GKE中都不可用。
无论如何,我们有两种不同的选择:
希望它有所帮助!
答案 2 :(得分:0)
您可以使用kubeip,这是一个Pod,为每个新节点分配一个预定义池中的IP地址。
答案 3 :(得分:0)
我知道这确实很老,但是对我来说解决方案是在Google Cloud中创建一个私有kubernetes集群。如果群集是私有的,则节点将没有任何外部ip。如果节点没有外部ip,而我们有一个nat nat,则所有流出的流量将具有与cloud nat ip相同的ip。所有这些都可以通过Google云控制台完成。
我发现本文对创建私有集群很有帮助。 https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters
如果集群是私有集群,并且您需要从某个远程区域访问它,请使用以下命令:
gcloud容器集群更新{cluster_name} --enable-master-authorized-networks --master-authorized-networks {您的IP的CIDR表示法}
注意:在与kubernetes集群相同的区域中创建cloud nat。同样,在创建云nat时,请确保为NAT IP地址选择“手动”选项,然后选择一个静态IP。除非您知道自己在做什么,否则将其余配置保留为默认设置。
设置完所有内容后,kubectl执行到在任何节点上运行的任何Pod。使用dig命令检查您的传出IP。
挖+短myip.opendns.com @ resolver1.opendns.com
它应该与cloud nat ip相同。