首页 > 解决方案 > 如何在设置了 auth-url 的 kubernetes 入口中公开一条路由?

问题描述

我正在通过 Kubernetes 入口(我们使用 Nginx 入口)进行基于路径的路由。我们有一个服务通过外部服务启动并在身份验证之后运行,例如第一个片段中的服务。该服务已被我们生态系统中的其他服务使用,但是随着开发的进行,该服务现在具有管理 API,我们需要关闭特定路径的身份验证。根据这个答案,这对于基本身份验证是不可能的,并且根据我尝试过的(第二个片段),也无法通过外部服务进行身份验证。有没有其他方法可以在不完全重新架构入口和域/路径的情况下允许特定路径而无需身份验证?

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: path-based-routing-1
  annotations:
    kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.class: nginx-external
    nginx.ingress.kubernetes.io/auth-url: http://authorizer.dev.svc.cluster.local
spec:
  tls:
  - hosts:
    - 'routing.example.com'
    secretName: routing.example.com
  rules:
  - host: 'routing.example.com'
    http:
      paths:
      - path: /
        backend:
          serviceName: path-based-routing-1
          servicePort: 80
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: path-based-routing-2
  annotations:
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/auth-type: ""
    kubernetes.io/ingress.class: nginx-external

    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - 'routing.example.com'
    secretName: routing.example.com
  rules:
  - host: 'routing.example.com'
    http:
      paths:
      - path: /management-api
        backend:
          serviceName: path-based-routing-2
          servicePort: 80

标签: authenticationkuberneteskubernetes-ingressnginx-ingress

解决方案


推荐阅读