【问题标题】:How to expose service with multiple port in one ingress with one 80 port如何通过一个 80 端口在一个入口中公开具有多个端口的服务
【发布时间】:2020-08-13 01:05:34
【问题描述】:

我想通过一个 80 端口的入口来公开我的两个 API 服务。

apiVersion: v1
kind: Service
metadata:
  name: my-api
spec:
  selector:
    app: my-api
  ports:
  - name: api1
    port: 3000
    targetPort: 3000
  - name: api2
    port: 4000
    targetPort: 4000
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  tls:
  - hosts:
    - example.com
    secretName: app-tls
  rules:
  - host: example.com
    http:
      paths:
      - path: /my-api(/|$)(.*)
        backend:
          serviceName: my-api
          servicePort: 80

但是当我尝试访问https://example.com/my-api 时,它总是返回 503 状态码。

【问题讨论】:

    标签: kubernetes kubernetes-ingress nginx-ingress


    【解决方案1】:

    servicePort: 80 并不意味着 nginx 入口在端口 80 上提供服务。这实际上是您后端服务上的端口,听起来您有 2 个端口:30004000

    默认情况下,nginx 入口控制器服务于端口80,如果您还启用了 TLS 或/和443。在您的情况下,如果您想同时提供这两个 API,您可以简单地将路径分开。

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: app-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
    spec:
      tls:
      - hosts:
        - example.com
        secretName: app-tls
      rules:
      - host: example.com
        http:
          paths:
          - path: /my-api1(/|$)(.*)
            backend:
              serviceName: my-api
              servicePort: 3000
          - path: /my-api2(/|$)(.*)
            backend:
              serviceName: my-api
              servicePort: 4000
    

    ✌️

    【讨论】:

      猜你喜欢
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 2015-02-28
      • 2015-02-10
      • 2020-01-23
      • 2021-05-28
      相关资源
      最近更新 更多