【问题标题】:Nginx Ingress - use https for backend based on pathNginx Ingress - 基于路径使用 https 作为后端
【发布时间】:2020-06-19 07:07:29
【问题描述】:

我正在配置入口以根据路径将请求传递给后端。只有service-external 需要使用HTTPS。如果我添加注释nginx.ingress.kubernetes.io/backend-protocol: 'HTTPS',入口将使用 https 作为两个后端,这是不希望的。无论如何,仅对选定的后端使用 https 吗?

ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: 'true'
  tls:
  - secretName: my-tls
    hosts:
    - myhost.com
  rules:
  - host: myhost.com
    paths:
    - path: /external/
      serviceName: service-external
      servicePort: 443
    - path: /
      serviceName: service-api

【问题讨论】:

  • 实现此目的的唯一方法是创建另一个没有 TLS 信息的入口,您可以使用同一主机执行此操作。它是您的选择吗?如果是,我可以发布一个示例作为答案。
  • 这是否意味着也允许http://myhost.com
  • 是的,您可以使用myhost.com 创建另一个入口规范,并使用不带 TLS 的所需路径。
  • 这不是我想要的。因为那样 https 流量就不能去 http 后端了吧?

标签: kubernetes-ingress nginx-ingress


【解决方案1】:

如 cmets 中所述,在入口规范中使用注释将为所有路径启用此功能。

实现您想要的唯一方法是创建具有所需路径的新入口规范。因此,对于同一个 host,您将有 2 个入口,请参见以下示例:

我正在配置入口以根据路径将请求传递给后端。只有service-external 需要使用HTTPS。如果我添加注释nginx.ingress.kubernetes.io/backend-protocol: 'HTTPS',入口将使用 https 作为两个后端,这是不希望的。无论如何只能将 https 用于选定的后端?

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-https-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/backend-protocol:  "HTTPS"
spec:
  tls:
    - hosts:
      - myapp.com
      secretName: myapp.com
  rules:
  - host: myapp.com
    http:
      paths:
      - path: "/"
        backend:
          serviceName: my-https-service
          servicePort: 443
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-http-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  tls:
    - hosts:
      - myapp.com
      secretName: myapp.com
  rules:
  - host: myapp.com
    http:
      paths:
      - path: "/notsecure"
        backend:
          serviceName: my-http-service
          servicePort: 80

第一个入口将对https://myapp.com/ 的每个请求重定向到my-https-service,如果请求是到https://myapp.com/notsecure,则请求将通过HTTP 重定向到服务my-http-service,但对于最终用户,连接仍然HTTPS。

【讨论】:

    猜你喜欢
    • 2019-05-14
    • 2021-02-15
    • 2021-05-15
    • 2021-09-15
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 2021-05-15
    • 2019-01-16
    相关资源
    最近更新 更多