Kubernetes 使用 Gitlab 安装 Ingress returns "?"作为外部 IP

Kubernetes using Gitlab installing Ingress returns "?" as external IP

我已成功将我的 Kubernetes 集群连接到 Gitlab。我还能够通过 Gitlab UI(Operations->Kubernetes)安装 Helm 我的问题是,如果我单击 "Install"-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 集群

我通过kubeadm安装了Kubernetes,使用flannel作为CNI

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 之前,我必须配置一些东西吗?我是否需要一个外部负载均衡器(我的想法:Git实验室会为我创建该服务)?

再提示一下:安装完成后,Nginx-Ingress-Controller Service的状态会一直是pending。它无法检测到外部 IP 的原因。我还修改了服务的 yaml-File 并手动放置了“externalIPs:-External-IP”行。输出结果是它不再挂起。但是我仍然无法通过键入上面的内容找到外部 IP命令和 Gitlab 也找不到任何外部 IP

编辑: 安装后会发生这种情况: see picture

编辑2: 通过 运行ning 以下命令:

kubectl describe svc ingress-nginx-ingress-controller -n gitlab-managed-apps

我得到以下结果:

see picture

在事件日志中,您会看到我将类型切换到 "NodePort" 一次,然后又切换回 "LoadBalancer",并且我在 yaml 文件中添加了 "externalIPs: -192.168.50.235" 行。如您所见,有一个外部 IP,但 Git 未检测到它。

顺便说一句。我没有使用任何这些云提供商,如 AWS 或 GCE,我发现 LoadBalancer 不是那样工作的。但是必须有一个没有 LoadBalancer 的解决方案。

我会考虑看看 MetalLB as for the main provisioner of Load balancing service in your cluster. If you don't use any of Cloud providers in order to obtain the entry point (External IP) for Ingress resource, there is option for Bare-metal environments to switch to MetalLB solution which will create Kubernetes services of type LoadBalancer in the clusters that don’t run on a cloud provider, therefore it can be also implemented for NGINX Ingress Controller

通常,MetalLB 可以通过 Kubernetes 清单文件或使用 Helm package manager as described here 安装。

MetalLB 在 Kubernetes 集群中部署自己的服务,它可能需要保留 IP 地址池才能获得 ingress-nginx 服务的所有权。这个池可以在一个名为 configConfigMap 中定义,它位于与 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.

中查找有关 MetalLB NGINX Ingress Controller 实现的更多详细信息

经过一些研究,我发现这是一个 Gitlab 问题。正如我上面所说,我成功地建立了到我的集群的连接。由于我在没有云提供商的情况下使用 Kubernetes,因此无法使用类型 "LoadBalancer"。因此您需要添加外部 IP 或将类型更改为 "NodePort"。这样你就可以让你的 Ingress-Controller 可以在外面访问。

看看这个:

我刚刚继续 Gitlab 教程,它成功了。