4

我已经成功地将我的 Kubernetes-Cluster 与 Gitlab 连接起来。此外,我还能够通过 Gitlab UI(操作->Kubernetes)安装 Helm。我的问题是,如果我单击 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 之前有什么需要配置的吗?我是否需要一个外部负载均衡器(我的想法:Gitlab 将为我创建该服务)?

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

编辑:安装后会发生这种情况: 见图

EDIT2:通过运行以下命令:

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

我得到以下结果:

看图片

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

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

4

2 回答 2

2

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

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

MetalLB在 Kubernetes 集群中部署自己的服务,它可能需要保留 IP 地址池才能获得ingress-nginx服务的所有权。该池可以定义在与控制器位于同一命名空间的ConfigMap调用中: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

LoadBalancer一旦入口服务从该地址池获得 IP 地址,外部 IP 将被分配给您。

在官方文档MetalLB中查找有关NGINX Ingress Controller 实现的更多详细信息。

于 2018-11-20T12:01:09.707 回答
0

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

看看这个:kubernetes service external ip pending

我只是继续 Gitlab 教程,它工作。

于 2018-11-21T15:31:34.647 回答