我有一个关于k8s的项目,其中包含3个服务,我想用基本身份验证和1个我想公开的服务来介绍。在由url规则划分的入口4服务中,它们具有不同的前缀。我在所有规则的入口都找到了有关基本身份验证设置的教程,但没有发现包含URL的排除规则。
不幸的是GCP Ingress
,由于此功能特定于Nginx Ingress,因此不提供基本的身份验证。
作为解决方法basic auth
,GCP 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
应该没有注释:
第二个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;
}
对我很好