【问题标题】:GitLab CI in GKE private cluster can't connect to masterGKE 私有集群中的 GitLab CI 无法连接到主集群
【发布时间】:2019-04-29 03:48:05
【问题描述】:

到目前为止,我们一直在为所有工作负载使用 GKE 公共集群。我们创建了第二个私有集群(仍然是 GKE),提高了安全性和可用性(旧集群是单专区,新集群是区域集群)。我们将 Gitlab.com 用于我们的代码,但在集群中使用自托管的 Gitlab CI 运行器。

运行器在公共集群上运行良好,所有工作负载都成功完成。但是在私有集群上,thr CI 的所有 kubectl 命令都失败并显示Unable to connect to the server: dial tcp <IP>:443: i/o timeout error。 CI 配置没有更改 - 相同的基本映像,仍然使用 gcloud SDK 和特定于 CI 的服务帐户来对集群进行身份验证。

两个集群都启用了主授权网络,并且只设置了我们的办公室 IP。 Master 可以从公共 IP 访问。身份验证成功,客户端证书和基本身份验证均被禁用。已配置 Cloud NAT,节点可以访问互联网(可以拉取容器镜像,Gitlab CI 可以连接等)。

我是否缺少一些重要的配置?我还应该看什么?

【问题讨论】:

    标签: kubernetes gitlab gitlab-ci google-kubernetes-engine


    【解决方案1】:

    我找到了解决问题的方法,但我不完全确定原因。

    我使用了gcloud container clusters get-credentials [CLUSTER_NAME],它提供了主节点的公共端点。然而,由于某种原因,这在集群内无法访问 - 所以我认为它需要将 NAT 的公共 IP(不是静态提供的)添加到授权网络。

    我添加了 --internal-ip 标志,它提供了集群的内部 IP 地址。 CI 现在可以连接到主服务器了。

    来源:https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl#internal_ip

    tl;博士-gcloud container clusters get-credentials --internal-ip [CLUSTER_NAME]

    【讨论】:

    • 您还可以在连接到集群时使用 kubectl get ep 获取私有端点,它会列出一个名为 kubernetes 的端点,它将显示集群将使用的私有 IP
    • @PatrickW 是的,它确实列出了它,但是 kubectl 必须首先能够访问集群。就我而言,kubectl 根本无法连接到集群/主服务器。
    • 对,一旦创建集群并首先运行原始命令,获取 IP,然后使用内部 IP 继续前进,您必须得到它。不幸的是,这不是使用 gcloud 可以解决的问题。
    【解决方案2】:

    如果是 gitlab.com,可以在 GKE 上的 Master 授权网络中将其 ip 范围列入白名单,

    https://docs.gitlab.com/ee/user/gitlab_com/#ip-range

    【讨论】:

      猜你喜欢
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 2020-01-30
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      相关资源
      最近更新 更多