【问题标题】:GCE/GKE NAT gateway route kills ssh connectionGCE/GKE NAT 网关路由终止 ssh 连接
【发布时间】:2018-09-25 05:56:02
【问题描述】:

我正在尝试为 GKE/GCE 上的 Kubernetes 节点设置 NAT 网关。 我按照教程(https://cloud.google.com/vpc/docs/special-configurations 章节:“将实例配置为 NAT 网关”)中的说明进行操作,还尝试了使用 terraform 的教程(https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway

但是在两个教程中(甚至在新创建的谷歌项目上)我都遇到了同样的两个错误:

  • NAT 根本不工作。流量仍在通过节点传出。
  • 我无法通过 ssh 进入我的 gke 节点 -> 超时。我已经尝试设置一个优先级为 100 的规则,允许所有 tcp:22 流量。

只要我标记了 gke-node-instances,以便配置的路由适用于它们,SSH 连接就不再可能。

【问题讨论】:

    标签: google-cloud-platform


    【解决方案1】:

    您已经找到了第一个问题的解决方案:使用正确的标签标记节点,或者手动创建针对管理 GKE 节点的实例组的路由。

    关于 SSH 问题:

    在您链接的 terraform 教程存储库中的 NAT 网关示例的自述文件中的“警告”下回答了此问题(在此处复制以符合 StackOverflow 规则)。

    下面提到的 Web 控制台在内部使用与 kubectl exec 相同的 ssh 机制。简短的版本是,截至发帖时,不可能同时通过 NAT 网关路由所有出口流量使用 kubectl exec 与集群上运行的 pod 交互.


    更新@2018-09-25:

    如果您只需要通过 NAT 网关路由特定流量(例如,如果您有第三方的服务要求在其防火墙中将您的 IP 地址列入白名单),则一种解决方法。 p>

    请注意,此解决方法需要您进行强大的警报和监控,因为如果您的供应商的公共 IP 发生更改,事情将会中断

    如果您在 GCP 中创建路由时指定了严格的目标 IP 范围,则只有发往这些地址的流量将通过 NAT 网关进行路由。在我们的案例中,我们在 VPC 网络路由表中定义了多个路由,每个路由对应我们供应商的公共 IP 地址。

    在这种情况下,包括execlogs 在内的各种kubectl 命令将继续按预期工作。


    一个可能的解决方法是使用下面sn-p中的命令连接到一个节点,并在该节点上使用docker exec进入一个容器。这当然意味着您需要先找到您的 pod 正在运行的节点,然后才能通过网关跳转到节点并运行 docker exec

    注意事项

    Web 控制台 SSH 将不再工作,您必须通过 NAT 网关机器跳转到 SSH 进入 GKE 节点:

    eval ssh-agent $SHELL
    ssh-add ~/.ssh/google_compute_engine
    CLUSTER_NAME=dev
    REGION=us-central1
    gcloud compute ssh $(gcloud compute instances list --filter=name~nat-gateway-${REGION} --uri) --ssh-flag="-A" -- ssh $(gcloud compute instances list --filter=name~gke-${CLUSTER_NAME}- --limit=1 --format='value(name)') -o StrictHostKeyChecking=no
    

    来源:https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway/tree/master/examples/gke-nat-gateway

    【讨论】:

    • 我发现“kubectl logs -f $SOME_POD”对我来说也会失败。有什么解决方法吗?
    • 解决此问题的唯一方法(不完全依赖 Stackdriver Logging)是在为 NAT 创建路由时提供明确的目标 IP 范围。例如,如果您正在实施 NAT 网关来为第三方供应商提供可列入白名单的 IP 地址以添加到他们的防火墙配置中,您将为每个供应商的公共 IP 地址创建一个路由规则。这样,只有发往该供应商的流量才会通过网关路由。
    【解决方案2】:

    【讨论】:

    • 好主意,但它不是一个很好扩展的解决方案。不幸的是,使用 Google Cloud,您必须为每个未使用的保留 IP 付费。
    猜你喜欢
    • 2019-06-11
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 2019-04-08
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多