如何在入口中为包含的 url 规则设置基本身份验证?
How to setup basic auth in ingress for included url rules?
我有一个关于 k8s 的项目,其中包含 3 项服务,我想用基本身份验证覆盖它,还有 1 项我想成为的服务 public。
在入口 4 中,服务由 url 规则划分,具有不同的前缀。
我在所有规则的入口中找到了关于基本身份验证设置的教程,但没有关于排除的教程,包括 urls.
很遗憾GCP Ingress
没有提供basic auth authentication as this feature is specific for Nginx Ingress。
作为 GCP Ingress
中 basic auth
的解决方法,您可以使用 IAP
。详细的How To
信息可以在Enabling IAP for GKE文章中找到。
如果您仍想使用 Nginx Ingress basic auth
,可以在 GKE
上使用,但您需要指定 nginx
注释。
metadata:
name: foo
annotations:
kubernetes.io/ingress.class: "nginx"
关于仅在四分之一的服务上使用 basic auth
,您可以创建 2 个 Ingress
。在另一个 Whosebug 线程中讨论了非常相似的问题,其中包含很好的解决方案 - Nginx-ingress Kubernetes routing with basic 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>
附加信息
有一个选项可以拒绝所有流量到特定路径。可以通过configuration-snippet注解来实现。
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
location /specificpath {
deny all;
}
我有一个关于 k8s 的项目,其中包含 3 项服务,我想用基本身份验证覆盖它,还有 1 项我想成为的服务 public。 在入口 4 中,服务由 url 规则划分,具有不同的前缀。 我在所有规则的入口中找到了关于基本身份验证设置的教程,但没有关于排除的教程,包括 urls.
很遗憾GCP Ingress
没有提供basic auth authentication as this feature is specific for Nginx Ingress。
作为 GCP Ingress
中 basic auth
的解决方法,您可以使用 IAP
。详细的How To
信息可以在Enabling IAP for GKE文章中找到。
如果您仍想使用 Nginx Ingress basic auth
,可以在 GKE
上使用,但您需要指定 nginx
注释。
metadata:
name: foo
annotations:
kubernetes.io/ingress.class: "nginx"
关于仅在四分之一的服务上使用 basic auth
,您可以创建 2 个 Ingress
。在另一个 Whosebug 线程中讨论了非常相似的问题,其中包含很好的解决方案 - Nginx-ingress Kubernetes routing with basic 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>
附加信息
有一个选项可以拒绝所有流量到特定路径。可以通过configuration-snippet注解来实现。
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
location /specificpath {
deny all;
}