You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Rancher部署Kubernetes集群后Ingress访问IP问题咨询

解决Rancher集群中Ingress访问IP的问题

首先咱们拆解下你遇到的核心矛盾:为什么Ingress显示两个对应VM的IP,但访问VM#1跳Rancher UI,VM#2却连接超时?

问题根源分析

  1. 端口冲突:你在VM#1上同时部署了Rancher服务器(Docker容器)和K8s的control-plane/worker节点。Rancher默认会抢占节点的80/443端口,而NGINX Ingress Controller同样需要监听这两个端口处理外部请求——这就导致Ingress的端口被Rancher占用,所以你访问VM#1的IP时,打开的是Rancher UI而非Ingress路由的服务。
  2. VM#2端口未开放:VM#2作为纯worker节点,Ingress Controller的Pod应该已经部署在上面,但你的防火墙/安全组大概率没开放80/443端口,或者节点网络策略限制了外部访问,才会出现连接超时。

分步解决方案

1. 先确认Ingress Controller的运行位置

执行命令查看Ingress Controller Pod所在的节点,这些节点的IP才是访问Ingress服务的目标IP:

kubectl get pods -n ingress-nginx -o wide

(如果你的Ingress Controller部署在其他命名空间,替换ingress-nginx即可)

2. 解决VM#1的端口冲突问题

既然VM#1同时承担Rancher服务器和K8s节点,咱们调整Rancher的端口,把80/443留给Ingress Controller:

  • 先停止并删除现有Rancher容器:
docker stop <rancher-container-id>
docker rm <rancher-container-id>
  • 重新启动Rancher,指定非冲突的端口(比如8080/8443):
docker run -d --restart=unless-stopped -p 8080:80 -p 8443:443 rancher/rancher:latest

之后你可以通过http://<VM#1-IP>:8080https://<VM#1-IP>:8443访问Rancher UI,VM#1的80/443端口就可以用来访问Ingress路由的服务了。

3. 开放VM#2的端口

如果Ingress Controller Pod跑在VM#2上,需要开放VM#2的80和443端口:

  • 以Linux为例,用iptables开放端口:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  • 如果是云服务商的VM,还要在安全组里添加允许外部访问80/443的规则。

4. 升级Ingress配置(可选但推荐)

你当前用的extensions/v1beta1 API版本已被Kubernetes废弃,建议升级到networking.k8s.io/v1避免后续兼容性问题:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: front-end
            port:
              number: 3000
      - path: /supermarket/
        pathType: Prefix
        backend:
          service:
            name: backend
            port:
              number: 8081

注意新增的pathType字段是networking.k8s.io/v1版本的必填项。

最终访问方式

调整完成后:

  • 如果Ingress Controller在VM#1上:访问http://<VM#1-IP>/supermarket/就能获取后端服务响应
  • 如果Ingress Controller在VM#2上:访问http://<VM#2-IP>/supermarket/即可

内容的提问来源于stack exchange,提问作者Borislav T

火山引擎 最新活动