Warm tip: This article is reproduced from serverfault.com, please click

kubernetes-如何为包含的URL规则在入口中设置基本身份验证?

(kubernetes - How to setup basic auth in ingress for included url rules?)

发布于 2020-11-23 14:38:31

我有一个关于k8s的项目,其中包含3个服务,我想用基本身份验证和1个我想公开的服务来介绍。在由url规则划分的入口4服务中,它们具有不同的前缀。我在所有规则的入口都找到了有关基本身份验证设置的教程,但没有发现包含URL的排除规则。

Questioner
Oleksiy
Viewed
0
PjoterS 2020-12-01 22:30:25

不幸的是GCP Ingress由于此功能特定于Nginx Ingress,因此不提供基本的身份验证

作为解决方法basic authGCP Ingress你可以使用IAP有关详细How To信息,请参见为GKE启用IAP

如果你仍然想使用Nginx Ingress basic auth,可以继续使用GKE但是需要指定nginx注释。

metadata:
  name: foo
  annotations:
    kubernetes.io/ingress.class: "nginx"

关于basic auth使用四项服务中的一项,你可以创建2 Ingress在另一个stackoverflow线程中讨论了非常类似的问题,该线程包含一个很好的解决方案-Nginx-ingress Kubernetes路由和基本auth

基本身份验证入口

首先Ingress应该没有注释:

  • nginx.ingress.kubernetes.io/auth-type
  • nginx.ingress.kubernetes.io/auth-secret
  • nginx.ingress.kubernetes.io/auth-realm

第二个Ingress应包含适当的注释,并且应类似于YAML下方。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: auth-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'
    #cert-manager.io/cluster-issuer: if you would use cert manager like letsencrypt
spec:
  tls:
    - hosts:
        - example.com
      secretName: example-tls
  rules:
    - host: example.com
      http:
        paths:
          - path: /auth
            backend:
              serviceName: auth-service
              servicePort: <auth-service-port>

附加信息

有一个选项可以拒绝所有通往特定路径的流量。可以通过配置片段注释来实现

   annotations:
      nginx.ingress.kubernetes.io/configuration-snippet: |

      location /specificpath {

           deny all;  
      }