使用Gitlab安装Ingress的Kubernetes返回“?”作为外部IP

时间:2018-11-19 09:23:40

标签: docker kubernetes continuous-integration gitlab nginx-ingress

我已成功将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

我得到以下结果:

see picture

在事件日志中,您将看到我一次将类型切换为“ NodePort”,然后又切换回“ LoadBalancer”,并且在yaml文件中添加了“ externalIPs:-192.168.50.235”行。如您所见,有一个externalIP,但是Git没有检测到它。

顺便说一句。我没有使用任何此类云提供商(例如AWS或GCE),但我发现LoadBalancer无法正常工作。但是必须要有一个没有LoadBalancer的解决方案。

2 个答案:

答案 0 :(得分:1)

我会考虑将MetalLB视作集群中负载均衡服务的主要供应者。如果您不使用任何Cloud提供程序来获取Ingress资源的入口点(外部IP),则裸机环境可以选择切换到MetalLB解决方案,这将创建Kubernetes不在云提供程序上运行的群集中类型为LoadBalancer的服务,因此也可以为NGINX Ingress Controller实施它。

通常,可以通过Kubernetes清单文件或使用Helm软件包管理器来安装MetalLB,如here所述。

MetalLB在Kubernetes集群上部署自己的服务,并且可能需要保留IP地址池才能拥有ingress-nginx服务的所有权。可以在一个名为ConfigMap的{​​{1}}中定义该池,该configMetalLB控制器位于同一命名空间中:

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教程,它起作用了。