Rancher中Kubernetes应用部署问题及解决方案

96次阅读
没有评论

问题描述

在Rancher 2.7环境下使用Kubernetes部署应用时遇到了问题。在部署过程中,配置了Traefik作为Ingress控制器,应用能够在Traefik仪表板正常显示,但无法通过80端口访问该应用。用户的环境包括Rancher 2.7、Kubectl、Traefik 2.9,系统为Ubuntu 22.04.1 LTS。用户提供了相关的配置文件和环境信息。

解决方案

在解决这个问题之前,首先要确保以下几点:

  1. 确保Traefik的端口(80和443)在主机的IP地址(192.168.0.2)上是可以访问的。
  2. 确保应用容器在启动时监听的端口是8000,并且可以正常访问。
  3. 确保Ingress、Service和Deployment的配置无误。

接下来,我们逐步检查并修复可能导致问题的部分。

  1. 确认Traefik端口和IP配置:确保Traefik的端口(80和443)在主机的IP地址(192.168.0.2)上可以访问。检查Traefik的配置文件,确保它的端口绑定和监听的IP地址设置正确。

  2. 确认应用容器的端口和可访问性:确保你的应用容器在启动时监听的端口是8000,并且没有被限制只能在回环地址上运行。可以添加一个livenessProbe来确保应用容器的健康状态。如果有必要,可以在容器内执行一些命令来验证应用的可用性。

  3. 检查Ingress、Service和Deployment配置:根据提供的配置文件,看起来Ingress、Service和Deployment的配置是没有明显问题的。但是为了进一步排除问题,可以尝试做一些调整:

  4. 尝试删除Ingress配置中的端口转发,让Service直接监听8000端口。
  5. 在Service中指定targetPort为8000。

修复方案示例

# 更新Service配置,直接监听8000端口
kind: Service
apiVersion: v1
metadata:
  name: whoami5
spec:
  type: ClusterIP
  ports:
    - port: 8000 # 将Service监听的端口改为8000
      targetPort: 8000
  selector:
    application: whoami5

# 更新Ingress配置,移除端口转发
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: whoami5
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/router.tls: "true"
    traefik.ingress.kubernetes.io/router.tls.certresolver: default
spec:
  rules:
    - host: appv1.rancher.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: whoami5
                port:
                  number: 8000 # 将Ingress指向Service的8000端口

请注意:上述修复方案是基于已提供的配置文件的估测。在实际应用时,请先备份现有配置,然后再尝试修改。

在完成以上修复方案后,重新部署应用并确保Traefik的端口可以正常访问。如果问题仍然存在,可以进一步检查Rancher、Kubectl以及网络配置,确保整个环境正常运行。

补充说明

根据用户的问题评论,他提到了之前使用http而不是https来访问应用时出现了问题。这表明他可能已经解决了访问问题,但为了确保问题的根本解决,需要仔细检查上述配置,尤其是Traefik的TLS配置,确保https访问也正常工作。在配置Ingress时,确保使用了正确的TLS证书。

修复问题的关键是确保Traefik、应用容器以及Ingress、Service和Deployment之间的配置都是正确的,并且能够正常协作。当然,在进行修改时一定要小心,特别是在生产环境中,应该先在测试环境中验证修复方案的可行性。

正文完