我想要的设置非常简单。我将gitlab托管在kubernetes集群中,其入口定义为:
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终止,它使用了我的letencrypt证书。问题是(显然)SSH无法用于存储库。吊舱暴露了22个端口,我已经对其进行了验证:
但是,看起来Ingress不支持统一的L4 + L7规范。到目前为止,我还考虑了其他一些选择:
ssh.git.mycompany.com
并用于转发SSH流量。巨大的问题是,现在有很多开发人员在使用此文件,他们将不得不更改自己的.git/config
文件,这将造成极大的破坏性(不是硅谷的方式)。解决这个问题的最佳方法是什么?
编辑:由于答案是GitLab所特有的,因此需要修改标题,这样可能有助于人们寻找确切的问题。
答案 0 :(得分:0)
因此,我不确定这是否可以作为答案,因为虽然可以实现我们想要做的一切;它不支持负载均衡器的SSL终止。
所以基本的折衷办法是:
tls.crt
和tls.key
的特定格式,均为pem格式) 。您可以通过将这两个键作为文件安装,然后更改nginx设置(ssl_certificate
和ssl_certificate_key
)来继承相同的结构:在您的交易量部分:
卷: -名称:gitlab-cert 秘密: secretName: 项目: -键:tls.key 路径:git.mycompany.com.key -键:tls.crt 路径:git.mycompany.com.crt
然后将其安装在您想要的任何位置:
volumeMounts: -名称:gitlab-certs mountPath:/ 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终止,因为这是我们所有其他服务的工作方式,而且非同质性有点让我烦恼:(