【问题标题】:forward from ingress nginx controller to different nginx pods according to port numbers根据端口号从入口 nginx 控制器转发到不同的 nginx pod
【发布时间】:2021-05-15 13:58:53
【问题描述】:

在我的 k8s 系统中,我有一个 nginx 入口控制器作为 LoadBalancer,并将它访问到像 hedehodo.ddns.net 这样的 ddns 地址,这触发将 Web 流量转发到另一个 nginx 端口。 现在我部署了另一个适用于 node.js 应用程序的 nginx,但我无法将 nginx 入口控制器转发到端口 3000 的任何请求以转到另一个 nginx

这里是 nginx 入口控制器 yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: default
spec:
  rules:
  - host: hedehodo.ddns.net
    http:
      paths:
      - path: /
        backend:
          serviceName: my-nginx
          servicePort: 80
      - path: /
        backend:
          serviceName: helloapp-deployment
          servicePort: 3000

helloapp 部署使用负载均衡器,我可以从 IP:3000 访问它

任何人都可以帮助我吗?

【问题讨论】:

    标签: nginx kubernetes kubernetes-ingress nginx-ingress


    【解决方案1】:

    每个主机不能共享多个重复路径,因此在您的示例中,对主机的请求:hedehodo.ddns.net 将始终映射到列出的第一个服务:my-nginx:80

    要使用其他服务,您必须指定不同的路径。该路径可以使用您想要的任何服务。您的入口应始终指向服务,并且该服务可以指向部署。

    您还应该默认使用 HTTPS 作为您的入口。

    入口示例:

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: test-ingress
    spec:
      rules:
        - host: my.example.net
          http:
            paths:
              - path: /
                backend:
                  serviceName: my-nginx
                  servicePort: 80
              - path: /hello
                backend:
                  serviceName: helloapp-svc
                  servicePort: 3000
    

    服务示例:

    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: helloapp-svc
    spec:
      ports:
        - port: 3000
          name: app
          protocol: TCP
          targetPort: 3000
      selector:
        app: helloapp
      type: NodePort
    

    部署示例:

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloapp
      labels:
        app: helloapp
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: helloapp
      template:
        metadata:
          labels:
            app: helloapp
        spec:
          containers:
            - name: node
              image: my-node-img:v1
              ports:
                - name: web
                  containerPort: 3000
    

    【讨论】:

    • 非常感谢。实际上,您的配置 100% 有效,但我的问题比我描述的要复杂一些。我有几个 nodejs 应用程序都可以在端口 3000 上运行,我必须在一个网页中显示每个 nodejs 插件。我该怎么做?
    • 我不确定您的真正问题是否得到了体现。也许使用您拥有的详细信息创建一个新问题。根据有关此问题的信息,答案是否有效?如果是,请将其标记为正确答案。
    【解决方案2】:

    同一主机不能有相同的“路径:/”。为您的新服务更改路径。

    【讨论】:

    • 路径不同也没关系
    猜你喜欢
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 2020-03-19
    相关资源
    最近更新 更多