【问题标题】:Handling multiple sub paths via Nginx Ingress通过 Nginx Ingress 处理多个子路径
【发布时间】:2020-05-12 14:34:51
【问题描述】:

我正在努力让 Ingress 控制器正确处理子路径。我的架构 - 两个服务位于一个域的不同路径上。每个服务都有自己的入口配置:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress1
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /
    cert-manager.io/cluster-issuer: "letsencrypt-production-issuer"
    kubernetes.io/ingress.allow-http: "false"    
spec:
  tls:
  - hosts:
    - api.mydomain.com
    secretName: my-secret
  rules:
  - host: api.mydomain.com
    http:
      paths:
      - path: /path1
        backend:
          serviceName: service1
          servicePort: 80

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress2
  annotations:
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/cluster-issuer: "letsencrypt-production-issuer"
    kubernetes.io/ingress.allow-http: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - api.mydomain.com
    secretName: my-secret
  rules:
  - host: api.mydomain.com
    http:
      paths:
      - path: /path2
        backend:
          serviceName: service2
          servicePort: 80

通过上述配置,第一个入口有效,我能够在 api.mydomain.com/path1 到达我的端点,同时 api.mydomain.com/path2 返回 http 400。我做错了什么?

【问题讨论】:

标签: kubernetes kubernetes-ingress nginx-ingress


【解决方案1】:

所以实际问题与 ingress 无法找到端点有点不同。我的后端服务是安全的 gRPC 服务,因此希望通过 https 或 grpcs 调用。因此,将入口设置为针对安全后端运行解决了问题:

nginx.ingress.kubernetes.io/secure-backends: "true"

对于较新版本的 k8s,您应该使用不同的属性。

【讨论】:

    猜你喜欢
    • 2021-05-15
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多