nginx - 如何在入口处通过 HTTP 在多个端口上公开服务?

标签 nginx kubernetes kubernetes-ingress nginx-ingress

我在 Kubernetes 中有一项服务,我必须通过 HTTP 在多个端口上公开该服务。 我使用 Nginx-Ingress 并且能够成功地通过端口 80 公开我的服务。(http://serviceA.example.com --> service-a:80)

但是我无法为 Http 使用与端口 80 不同的端口。 我怎样才能让 nginx-ingress 也监听端口 7049。

我已经尝试在 nginx 服务上公开端口 7049,并向 nginx Controller 添加注释 nginx.org/listen-ports: "80,7049"。两者都不适合我。

我希望得到以下输出:

http://serviceA.example.com --> service-a:80

http://serviceA.example.com:7049 --> service-a:7049

入口服务.yml

apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress
  namespace: nginx-ingress
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  - port: 443
    targetPort: 443
    protocol: TCP
    name: https
  selector:
    app: nginx-ingress

我的服务.yml

apiVersion: v1
kind: Service
metadata:
  name: my-service
  labels:
    app: my-service
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  - port: 443
    targetPort: 443
    protocol: TCP
    name: https
  - port: 7049
    targetPort: 7049
    name: symbols
  selector:
    app: my-service

我的服务入口.yml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-service
spec:
  rules:
  - host: myservice.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: my-service
          servicePort: 80

最佳答案

Ingress 对象用于为 HTTP 和 HTTPS 流量公开应用程序。

Ingress, added in Kubernetes v1.1, exposes HTTP and HTTPS routes from outside the cluster to services within the cluster. Traffic routing is controlled by rules defined on the Ingress resource.

what-is-ingress

您可以使用不同类型的路由,例如基于路径或基于主机名的路由,但 nginx 的端口号将为 80 或 & 443。

如果你想在不同于 80 和 443 的端口上公开你的应用程序,你需要使用 LoadBalancer类型服务

关于nginx - 如何在入口处通过 HTTP 在多个端口上公开服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55401373/

相关文章:

如果服务返回错误,Nginx 服务跨域请求失败

php - 如何从 Symfony Process Component 使用 sudo 命令?

nginx - 使用 ffmpeg 将 HLS 转码/transmux 到 RTMP 以使 nginx 联播不起作用

kubernetes - 如何为启动KubernetesPodOperator的Kubernetes Airflow Worker Pod创建kubeconfig

linux - Rook和Ceph在Kubernetes上

nginx - 无法在非根上下文路径中通过 kubernetes ingress-nginx 使 websocket 应用程序工作

kubernetes - 为什么入口 Controller 中有负载均衡器?

kubernetes - Traefik Dashboard : Ingress and IngressRoute, 它们可以共存吗?

nginx - 如何在多个端口上运行Nginx

nginx - kubernetes ingress server-alias 仅适用于一台 ingress 主机