【问题标题】:Kubernetes using Gitlab installing Ingress returns "?" as external IPKubernetes 使用 Gitlab 安装 Ingress 返回“?”作为外部 IP
【发布时间】:2019-04-21 15:10:45
【问题描述】:

我已成功将我的 Kubernetes-Cluster 与 Gitlab 连接起来。我还能够通过 Gitlab UI 安装 Helm (Operations->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 集群

我通过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 文件,并手动输入了“externalIPs : -External-IP”行。输出结果是它不再处于挂起状态。但我仍然无法通过键入上述内容找到外部 IP命令和 Gitlab 也找不到任何外部 IP

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

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

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 的解决方案。

【问题讨论】:

  • 您是如何配置 k8s 集群(云提供商,裸机解决方案)的?你能查一下kubectl describe svc ingress-nginx-ingress-controller -n gitlab-managed-apps吗?
  • @mk_sta 我在 Ubuntu 18.04.1 LTS (Bionic Beaver) 虚拟机上运行 Kubernetes。检查第二张图片以查看说明。

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


【解决方案1】:

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

通常,MetalLB 可以通过 Kubernetes 清单文件或使用Helm 包管理器安装,如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 中查找有关 NGINX 入口控制器的MetalLB 实现的更多详细信息。

【讨论】:

  • 谢谢!会看看的。
  • 我面临一个新问题。当我尝试部署某些东西(通过 Gitlab)时,我收到以下错误:$ deploy 错误:升级失败:未提供版本错误:作业失败:执行远程命令时出错:命令以非零退出代码终止:执行错误在 Docker 容器中:1 我使用 Gitlab 的默认 DevOps。在构建管道中,一切正常。但是当涉及到生产时,我得到了上面的错误代码。
  • 为此错误创建单独的问题,这与我的答案无关。
【解决方案2】:

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

看看这个:kubernetes service external ip pending

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

【讨论】:

猜你喜欢
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
相关资源
最近更新 更多