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

Kubernetes中通过Ingress暴露React应用及多API服务端口配置咨询

解决你的K8s Ingress配置问题

我来帮你梳理下解决这个问题的步骤,主要分两块:调整Ingress Controller的端口避开被占用的80,然后配置Ingress规则转发React应用和各个API请求。

第一步:修改Ingress Controller的Service,指定NodePort为30000

因为你的节点80端口被Apache占用,没法用默认的80端口暴露Ingress,所以需要把Ingress Controller的HTTP端口绑定到30000。假设你用的是官方的nginx-ingress-controller,操作如下:

手动修改Service

执行编辑命令打开Ingress Controller的Service配置:

kubectl edit service nginx-ingress-controller -n kube-system

找到spec.ports里的HTTP端口配置,添加nodePort: 30000,并确保Service类型是NodePort:

spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    targetPort: 80
    nodePort: 30000  # 固定HTTP端口为30000
  - name: https
    port: 443
    targetPort: 443
    # 如果需要HTTPS,也可以指定类似30001的nodePort,按需配置

用Helm安装的情况

如果是通过Helm部署的nginx-ingress,安装时直接指定参数:

helm install nginx-ingress ingress-nginx/ingress-nginx \
  --set controller.service.nodePorts.http=30000 \
  --namespace kube-system

第二步:配置Ingress规则,转发React应用和REST API

你的React应用Service是clientweb-service-ext(端口80),假设各REST API对应的ClusterIP Service分别是api-service-1、api-service-2(均用80端口),我们通过路径区分转发规则:

替换你当前的Ingress配置为以下内容:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: clientweb-ingress
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"  # 开启正则匹配,支持API子路径转发
spec:
  ingressClassName: nginx  # 指定Ingress Controller的class,默认是nginx
  rules:
  - http:
      paths:
      # 根路径转发到React应用
      - path: /
        pathType: Prefix
        backend:
          service:
            name: clientweb-service-ext
            port:
              number: 80
      # /api1路径转发到第一个REST API服务
      - path: /api1(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: api-service-1
            port:
              number: 80
      # /api2路径转发到第二个REST API服务
      - path: /api2(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: api-service-2
            port:
              number: 80
      # 可继续添加更多API的路径规则,依此类推

关键说明

  • ingressClassName:必须指定你的Ingress Controller的class,确保Ingress能被正确识别处理。
  • 路径匹配:根路径用Prefix类型,确保所有根路径请求都转发到React应用;API路径用正则匹配(配合use-regex注解),可以正确转发子路径请求(比如/api1/users会转发到api-service-1的/users)。
  • 如果需要按域名区分服务(比如react.example.com和api.example.com),可以给规则添加host字段,不过你当前需求是通过节点IP:30000访问,直接用路径区分即可。

第三步:验证配置

应用Ingress配置:

kubectl apply -f your-ingress-file.yaml

检查Ingress状态,确认规则生效:

kubectl get ingress clientweb-ingress

检查Ingress Controller的Service,确认30000端口已绑定:

kubectl get service nginx-ingress-controller -n kube-system

现在你就可以通过http://<节点IP>:30000访问React应用,通过http://<节点IP>:30000/api1、http://<节点IP>:30000/api2分别访问对应的REST API了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:32:52