Gitlab Kubernetes 集成
Posted
技术标签:
【中文标题】Gitlab Kubernetes 集成【英文标题】:Gitlab kubernetes integration 【发布时间】:2020-03-16 03:29:29 【问题描述】:我在服务器上有一个自定义 kubernetes 集群,公共 IP 和 DNS 指向它(也是通配符)。 Gitlab 按照本指南配置了集群:https://gitlab.touch4it.com/help/user/project/clusters/index#add-existing-kubernetes-cluster
但是,在安装Ingress
之后,从未检测到入口端点:
我尝试在k8s中修补对象,就像这样
externalIPs: (was empty)
- 1.2.3.4
externalTrafficPolicy: local (was cluster)
我怀疑问题是空入口(滚动到最后)对象然后调用:
# kubectl get service ingress-nginx-ingress-controller -n gitlab-managed-apps -o yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2019-11-20T08:57:18Z"
labels:
app: nginx-ingress
chart: nginx-ingress-1.22.1
component: controller
heritage: Tiller
release: ingress
name: ingress-nginx-ingress-controller
namespace: gitlab-managed-apps
resourceVersion: "3940"
selfLink: /api/v1/namespaces/gitlab-managed-apps/services/ingress-nginx-ingress-controller
uid: c175afcc-0b73-11ea-91ec-5254008dd01b
spec:
clusterIP: 10.107.35.248
externalIPs:
- 1.2.3.4 # (public IP)
externalTrafficPolicy: Local
healthCheckNodePort: 30737
ports:
- name: http
nodePort: 31972
port: 80
protocol: TCP
targetPort: http
- name: https
nodePort: 31746
port: 443
protocol: TCP
targetPort: https
selector:
app: nginx-ingress
component: controller
release: ingress
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
但 Gitlab 仍然找不到入口端点。我尝试重新启动集群和 Gitlab。 Gitlab 中的网络检查总是显示这个响应:
...
name ingress
status installed
status_reason null
version 1.22.1
external_ip null
external_hostname null
update_available false
can_uninstall false
...
任何想法如何拥有一个有效的 Ingress Endpoint?
GitLab:12.4.3 (4d477238500) k8s:1.16.3-00
【问题讨论】:
你能发布入口吗?kubectl get ingress
@Crou 它是空的
尝试使用kubectl get ingress --all-namespace
以确保它不在不同的命名空间中。
@Crou 也是空的..
这意味着没有部署ingress
。您只安装了 ingress-controller,现在您需要部署一个使用它的 ingress。
【参考方案1】:
我遇到了和你一模一样的问题,终于知道怎么解决了。
首先要了解的是,在裸机上,不使用 MetalLB 就无法使其工作,因为它调用所需的 Kubernetes API,使其接受您提供给 LoadBalancer
类型的 Service
的 IP 地址.
所以第一步是deploy MetalLB 到您的集群。
然后你需要有另一台机器,运行 NGiNX 或 HAproxy 之类的服务或任何可以做负载平衡的服务。
最后但并非最不重要的一点是,您必须将负载均衡器机器 IP 地址提供给 MetalLB,以便它可以将其分配给 Service
。
通常 MetalLB 需要一系列 IP 地址,但您也可以像我一样提供一个 IP 地址:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: staging-public-ips
protocol: layer2
addresses:
- 1.2.3.4/32
这样,MetalLB 会将 IP 地址分配给类型为 LoadBalancer
的 Service
,Gitlab 最终会找到 IP 地址。
警告:MetalLB 将分配一次 IP 地址。如果你需要很多 Service
类型为 LoadBalancer
,你需要很多机器运行 NGiNX/HAproxy 等,并将其 IP 地址添加到 MetalLB addresses
池中。
为了您的信息,我已将所有技术细节发布到my Gitlab issue here。
【讨论】:
以上是关于Gitlab Kubernetes 集成的主要内容,如果未能解决你的问题,请参考以下文章
如何找到用于 gitlab 集成的 gcloud Kubernetes api url
如何将 Azure AKS Kubernetes 集群自签名 CA 添加到 GitLab CI/CD Kubernetes 集成?
如何将 GitLab-Ci 与 Azure Kubernetes + Kubectl + ACR 集成以进行部署?
kubernetes(k8s)Gitlab CI Runner 的安装