使用 Ingress 公开或访问 Jenkins

Exposing or accessing Jenkins using Ingress

我正在尝试在我们的本地 Kubernetes 集群 v1.18.6 中设置我的 Jenkins 实例。浏览了互联网上的多个帖子,解释了这些步骤,但使用的是节点端口 IP 而不是使用入口。

我在找

  1. 我想访问 Jenkins 的域:jenkins.BU.org.com/jenkins.
  2. 使用入口控制器的主从通信。我相信 Jenkins 使用自定义协议与其构建代理进行通信,是 Java RMI,而不是基于 HTTP。

除了下面文档中提到的步骤之外,我还需要做哪些额外的更改。

对 Kubernetes 及其动态非常陌生,所以这里的任何帮助都对我的学习很有帮助,谢谢。

https://www.digitalocean.com/community/tutorials/how-to-install-jenkins-on-kubernetes

所以从最基本的开始,我假设以下几点:

  • 您有一个可用的已配置 Kubernetes 集群
  • 您的集群中安装了 Ingress 控制器

首先要明确的是:

Workloads which run within the Kubernetes cluster should communicate via Service resources and not Ingress resources.

要记住的第二件事是:

Use Ingress resource to make your workloads reachable from outside of your cluster

最后,由于您希望在 jenkins.BU.org.com/jenkins 下访问您的 Jenkins 实例,因此您必须选择以下选项之一:

  • 购买 org.com 域,因为 jenkins.BU.org.comorg.com 域的子域
  • 设置你自己的私人网络(老实说,超出了这个问题的范围和我的知识范围)

因此,要回答您的问题,您需要执行以下操作以使您的 Jenkins 实例可从集群外部访问:

  • 创建你的 Jenkins master Pod 并打开一些端口,比如 8080
  • 创建一个服务资源,它选择您的 Pod 并将端口 80 转发到端口 8080
  • 创建一个 Ingress 资源,它将您想要的域名转发到您的服务到端口 80
  • 创建一个 LoadBalancer 服务以您的 Ingress 控制器为目标 Pods
  • 将 LoadBalancer 服务与您的实际负载均衡器相关联(取决于您的环境)
  • 将您的域名关联到负载均衡器 IP 以进行 DNS 解析

另一种解决方法是:

  • 创建你的 Jenkins master Pod 并打开一些端口,比如 8080
  • 创建一个 NodePort 类型的服务资源,它选择您的 Pod 并将端口 80 转发到端口 8080。这将在您的节点上打开一个端口,然后您应该能够通过该节点的 IP 地址访问您的 Pod节点。
  • 配置 DNS 以将所需的域名解析为节点的 IP。

我不推荐第二种方法,因为这意味着让您的节点直接在互联网上可用。