Kubernetes中的静态传出IP

时间:2016-12-14 02:19:24

标签: amazon-web-services kubernetes google-cloud-platform amazon-rds google-kubernetes-engine

我在google cloud(GKE)中运行k8s群集,在aws(RDS)中运行MySQL服务器。 Pod需要连接到RDS,它只允许来自某些IP的连接。如何配置传出流量以获得静态IP?

4 个答案:

答案 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中都不可用。

无论如何,我们有两种不同的选择:

  1. 创建一个充当出口代理的NAT网关虚拟机。这是一篇很好的文章(google cloud NAT gateway
  2. 将静态IP分配给容器群集VM实例
  3. 希望它有所帮助!

答案 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相同。