我已成功将Kubernetes-Cluster与Gitlab连接。另外,我还可以通过Gitlab UI安装Helm(操作-> Kubernetes) 我的问题是,如果我单击Ingress的“安装”按钮,Gitlab将创建Ingress-Controller所需的所有必要的东西。但是会遗漏一件事:外部IP。外部IP将标记为“?”。
如果我运行此命令:
kubectl get svc --namespace=gitlab-managed-apps ingress-nginx-ingress- controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}'; echo
它什么也不会显示。就像我不会有暴露外部IP的负载均衡器一样。
Kubernetes集群
我通过法兰绒作为CNI通过kubeadm安装了Kubernetes
kubectl版本:
Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.2"}
Server Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.2"}
在安装Ingress之前是否必须配置一些内容。我是否需要一个外部负载均衡器(我的想法:Gitlab将为我创建该服务)?
另一个提示:安装后,Nginx-Ingress-Controller服务的状态将保持挂起状态。原因是它无法检测到外部IP。我还修改了该服务的yaml-File,并手动输入了“ externalIPs:-External-IP行。其输出是它不再挂起。但是仍然无法通过键入上面的内容来找到外部IP命令和Gitlab也找不到任何外部IP
编辑: 安装后会发生这种情况: see picture
EDIT2: 通过运行以下命令:
kubectl describe svc ingress-nginx-ingress-controller -n gitlab-managed-apps
我得到以下结果:
在事件日志中,您将看到我一次将类型切换为“ NodePort”,然后又切换回“ LoadBalancer”,并且在yaml文件中添加了“ externalIPs:-192.168.50.235”行。如您所见,有一个externalIP,但是Git没有检测到它。
顺便说一句。我没有使用任何此类云提供商(例如AWS或GCE),但我发现LoadBalancer无法正常工作。但是必须要有一个没有LoadBalancer的解决方案。
答案 0 :(得分:1)
我会考虑将MetalLB视作集群中负载均衡服务的主要供应者。如果您不使用任何Cloud提供程序来获取Ingress
资源的入口点(外部IP),则裸机环境可以选择切换到MetalLB
解决方案,这将创建Kubernetes不在云提供程序上运行的群集中类型为LoadBalancer
的服务,因此也可以为NGINX Ingress Controller实施它。
通常,可以通过Kubernetes清单文件或使用Helm软件包管理器来安装MetalLB
,如here所述。
MetalLB
在Kubernetes集群上部署自己的服务,并且可能需要保留IP地址池才能拥有ingress-nginx
服务的所有权。可以在一个名为ConfigMap
的{{1}}中定义该池,该config
与MetalLB
控制器位于同一命名空间中:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 203.0.113.2-203.0.113.3
一旦入口服务从该地址池获取IP地址,外部IP便会分配给您的LoadBalancer
。
在官方documentation中找到有关NGNNX Ingress Controller的MetalLB
实现的更多详细信息。
答案 1 :(得分:0)
经过一番研究,我发现这是一个Gitlab问题。如上所述,我成功建立了到群集的连接。由于Im在没有云提供商的情况下使用Kubernetes,因此无法使用“ LoadBalancer”类型。因此,您需要添加一个外部IP或将类型更改为“ NodePort”。这样,您就可以在外部访问Ingress-Controller。
查看以下内容:kubernetes service external ip pending
我刚刚继续了Gitlab教程,它起作用了。