You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes 1.26.3中部署并配置Nginx-Ingress控制器?

问题排查与解答

一、svclb-nginx-ingress-v1-controller Pod Pending 问题排查

在Rancher Desktop环境下,这个svclb开头的Pod是ServiceLB组件的实例,用来给LoadBalancer类型的Service提供本地负载均衡能力。它处于Pending状态,大概率是以下几种情况:

  • 先查节点资源:执行kubectl describe node <节点名称>,看节点的CPU、内存是否有剩余容量
  • 看Pod事件详情:跑kubectl describe pod svclb-nginx-ingress-v1-controller -n kube-system,重点看Events字段,有没有镜像拉取失败、节点选择器不匹配这类具体报错
  • 确认Rancher Desktop的网络状态:ServiceLB依赖主机网络,检查containerd运行正常,且主机的80/443端口没被其他进程占用

另外可以先确认Nginx-Ingress核心组件状态:kubectl get pods -n kube-system | grep nginx-ingress,如果controller的Pod是Running状态,说明控制器本身已经正常启动,svclb的问题只是外部暴露的LoadBalancer服务暂时未就绪,不影响Ingress规则的内部转发测试。

二、Ingress配置疑问解答

1. ingressClassName 是否必须指定?

从Kubernetes 1.19版本开始,Ingress资源默认需要指定ingressClassName(除非集群设置了默认IngressClass):

  • 单Ingress控制器场景:先查集群里的IngressClass:kubectl get ingressclass,如果有标注default: true的条目,那Ingress配置里可以不写ingressClassName,系统会自动匹配;如果没有默认项,必须手动指定,否则Ingress规则不会被控制器识别。
  • 多Ingress控制器场景:必须指定ingressClassName,用来区分不同控制器处理对应的Ingress规则。

2. backend.service.port 指的是什么端口?

这个字段是集群内Service自身监听的端口,也就是你的game-core-service的8080端口。外部访问的80/443是Ingress控制器暴露的端口,Ingress规则会把外部80端口的请求转发到Service的8080端口。

给你一个符合需求的Ingress配置示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: game-core-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  ingressClassName: nginx # 换成你实际的IngressClass名称
  rules:
  - host: localhost
    http:
      paths:
      - path: /myservice/(.*)
        pathType: Prefix
        backend:
          service:
            name: game-core-service
            port:
              number: 8080

如果要让localhost:80/myservice直接转发到服务根路径,可根据服务的路由规则调整path和rewrite-target参数。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:42:15