gpt4 book ai didi

kubernetes - 在 LoadBalancer 上设置 HTTP+HTTPs 和 TCP 端口(想转发 GitLab SSH 和 Web)

转载 作者:行者123 更新时间:2023-12-04 17:21:36 29 4
gpt4 key购买 nike

我想要的设置相当简单。我在 kubernetes 集群中托管 gitlab,它的入口定义为:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gitlab-public
namespace: gitlab
annotations:
kubernetes.io/ingress.global-static-ip-name: git-public
spec:
tls:
- secretName: gitlab-cert
backend:
serviceName: gitlab
servicePort: 80

这为我设置了一切 - 启用了 SSL 终止,它使用我的 letsencrypt 证书。问题是(显然)SSH 不适用于存储库。 pod 暴露了 22 的端口,我已经验证过了:

Both SSH and HTTP ports are forwarded

不过Ingress貌似不支持统一的L4+L7规范。到目前为止我考虑过的其他一些选项:

  1. 创建另一个仅转发 22 -> 22 的负载均衡器作为 TCP(或 L4 入口)均衡器。问题是多个负载平衡器不能共享相同的静态 IP.. 这当然是有道理的。
  2. 基本上做之前的事情,但获得一个新的 DNS 和静态 IP,可能将其命名为 ssh.git.mycompany.com 并使用它来转发 SSH 流量。最大的问题是现在有很多开发人员在使用它,他们将不得不更改他们的 .git/config 文件,这将是极具破坏性的(不是以硅谷的方式) .
  3. 设置一个 L4 平衡器(在任何 k8s 配置之外)并让它处理 SSL 并设置三个端口以转发到 80 和 22。这是可能的最令人困惑的步骤.. 因为我不知道 Google LoadBalancer 是什么正在尝试做。我无法将前端映射到后端,甚至无法选择自己的端口。显然,它必须来自预定义端口列表,我猜这很愚蠢吧?相比之下,我们目前托管在 AWS 上,这是负载均衡器的样子:

enter image description here

解决这个问题的最佳方法是什么?

编辑:修改标题,因为答案有点特定于 GitLab,因此可能有助于人们寻找确切的问题。

最佳答案

因此,我不完全确定这是否可以作为答案,因为虽然它实现了我们想要做的一切;它不支持负载均衡器的 SSL 终止。

所以基本的折衷是这样的:

  1. 让 GitLab 为捆绑的 nginx Controller 提供 SSL 连接。 NGINX Settings for GitLab
  2. 设置 GitLab 以转发 HTTP -> HTTPs,标准的东西。文档涵盖了大部分内容。
  3. 当让 LoadBalancer 处理 SSL 时,您只需要指向一个 secret 就可以了(它恰好是具有 key tls.crttls.key 的特定格式,均为 pem 格式)。您可以通过将这两个 key 安装为文件然后更改 nginx 设置(ssl_certificatessl_certificate_key)来继承相同的结构:

在您的卷部分:

卷: - 名称:gitlab-cert secret : secret 名称: 项目: - key :tls.key 路径:git.mycompany.com.key - key :tls.crt 路径:git.mycompany.com.crt

然后将其挂载到您想要的任何位置:

卷挂载: - 名称:gitlab-certs 挂载路径:/etc/gitlab/ssl/

在上面的例子中,这会让你的 gitlab.rb 看起来像:

nginx['ssl_certificate'] = "/etc/gitlab/ssl/git.mycompany.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/git.mycompany.com.key"

如果您托管的域实际上是 git.mycompany.com,那么您可以跳过此步骤,因为上面显示的位置是它的默认位置。

最后不使用 Ingress,只公开您的部署:

apiVersion: v1
kind: Service
metadata:
name: gitlab
namespace: gitlab
spec:
type: LoadBalancer
loadBalancerIP: <your-static-ip>
ports:
- port: 80
name: http
targetPort: 80
protocol: TCP
- port: 443
name: https
targetPort: 443
protocol: TCP
- port: 22
name: ssh
targetPort: 22
protocol: TCP
selector:
app: gitlab

loadBalancerIP 的静态 ip 是您需要从 google 控制台获取的内容。请注意,这不适用于全局保留 IP。您必须获得与集群位于同一区域的区域 IP。

我仍然更喜欢 SSL 终止,因为这是我们所有其他服务的工作方式,而且非同质性让我有点恼火:(

关于kubernetes - 在 LoadBalancer 上设置 HTTP+HTTPs 和 TCP 端口(想转发 GitLab SSH 和 Web),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51205973/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com