Kubernetes内部网络和地址对同一Pod/Service的所有内部名称均无效

65次阅读
没有评论

问题描述

在使用K3s搭建Kubernetes集群时,用户遇到了一个问题,无法使用所有不同的名称访问Jenkins pod上的JNLP服务。用户在一个指南中配置了Jenkins pod,但是尝试访问不同的名称时,出现了一些问题。

具体问题如下:
– 使用 curl localhost:50000 访问JNLP服务,可以正常工作。
– 使用 curlcat /etc/hostname:50000 访问JNLP服务,也可以正常工作。
– 但是使用 curl jenkins-service:50000 访问JNLP服务,则会超时。
– 然而,对于端口号8080的访问,则没有问题。

用户怀疑这个问题与Kubernetes有关,尝试过一些修复方法但没有解决问题。

解决方案

请注意以下操作可能受版本差异或其他因素影响,请根据具体情况进行调整。

最佳解决方案

通过查阅相关资料,用户发现一个解决方案,该方案针对服务配置中端口的映射问题。解决方案的核心是将50000端口也映射到宿主机的一个端口上。

以下是解决方案的步骤:
1. 打开之前定义Jenkins服务的YAML文件,通常是service.yaml
2. 修改该文件,将50000端口添加到端口映射列表中,并将其映射到宿主机上的一个特定端口(这里的示例使用32000)。
3. 应用修改后的YAML文件,更新Jenkins服务的配置。

以下是修改后的YAML文件示例:

apiVersion: v1
kind: Service
metadata:
  name: jenkins-service
  namespace: devops-tools
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/path:   /
    prometheus.io/port:   '8080'
spec:
  selector:
    app: jenkins-server
  type: NodePort
  ports:
    - name: httpport
      port: 8080
      targetPort: 8080
      nodePort: 32000
    - name: jnlpport
      port: 50000
      targetPort: 50000

在上面的示例中,我们添加了一个名为jnlpport的新端口,将其映射到50000端口,并将其绑定到宿主机上的32000端口。然后,我们使用kubectl apply -f service.yaml命令应用了这个修改后的配置。这一修改应该会立即生效。

通过这个解决方案,你应该能够在Jenkins pod上成功访问50000端口的JNLP服务,即可解决问题。如果问题还未解决,请检查其他可能的问题,比如防火墙规则、网络配置等。

正文完