Kubernetes中的静态传出IP

Sho*_*chi 30 amazon-web-services amazon-rds google-cloud-platform kubernetes google-kubernetes-engine

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

Luc*_*ier 14

我有一个问题从Pod连接到sftp服务器.要解决此问题,首先需要创建外部IP地址:

gcloud compute addresses create {{ EXT_ADDRESS_NAME }} --region {{ REGION }}
Run Code Online (Sandbox Code Playgroud)

然后,我想您的pod已分配给默认池节点集群.提取默认池节点名称:

gcloud compute instances list | awk '{ print $1 }' | grep default-pool
Run Code Online (Sandbox Code Playgroud)

擦除vm实例的默认外部ip:

gcloud compute instances delete-access-config {{ VM_DEFAULT-POOL_INSTANCE }} --access-config-name external-nat
Run Code Online (Sandbox Code Playgroud)

添加之前创建的外部静态IP:

gcloud compute instances add-access-config {{ VM_DEFAULT-POOL_INSTANCE }} --access-config-name external-nat --address {{ EXT_ADDRESS_IP }}
Run Code Online (Sandbox Code Playgroud)

如果您的Pod未附加到默认池节点,请不要忘记使用nodeSelector选择它:

nodeSelector:
    cloud.google.com/gke-nodepool: {{ NODE_NAME }} 
Run Code Online (Sandbox Code Playgroud)


Mic*_*rsi 6

我做了一些研究,发现了一些事情.

我们正在寻找的东西称为"出口IP"或NAT-as-a-Service,它们在GKE中都不可用.

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

  1. 创建一个充当出口代理的NAT网关虚拟机.这是一篇很好的文章谈论它(谷歌云NAT网关)
  2. 将静态IP分配给容器群集VM实例

希望能帮助到你!

  • 同样的讨论[这里](https://groups.google.com/forum/#!topic/kubernetes-users/zNytc8GVB5s).[NAT网关](https://cloud.google.com/compute/docs/networking#natgateway)似乎是现在的方法. (2认同)

mat*_*ter 5

我知道这确实很旧,但对我来说,解决方案是在谷歌云中创建一个私有 kubernetes 集群。如果集群是私有的,那么节点将没有任何外部 IP。如果节点没有外部 ip,并且我们有云 nat,那么所有传出流量将具有与云 nat ip 相同的 ip。所有这一切都可以通过谷歌云控制台来完成。

我发现这篇文章提供了有关创建私有集群的信息。 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 exec 到任何节点中运行的任何 pod。使用 dig 命令检查您的传出 IP。

dig +short myip.opendns.com @resolver1.opendns.com

应该和云nat ip 一样。