我正在设置一个ghost实例,试图使用客户端证书验证来保护/ghost路径。
我已经有了一个初始的ingress,并且它以指定为 / 的路径很好地提供了服务。
我正在尝试添加第二个(大部分相同)的ingress用于/ghost路径。如果我这样做并添加基本身份验证的注释,一切似乎都很正常。即,如果我浏览到/ghost,我会在basic-auth秘密中提示凭据,如果我浏览其他任何URL,则会无需进行身份验证就可以访问。
然后,我根据此示例切换到基于客户端证书验证:https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/auth/client-certs
当我尝试这样做时,整个站点或站点的所有内容都被保护,而不是像基本身份验证那样进行基于路径的分离。查看运行pod的nginx.conf时,proxy_set_header ssl-client-verify
、proxy_set_header ssl-client-subject-dn
和proxy_set_header ssl-client-issuer-dn
元素被添加到根路径和/ghost路径下。我尝试将其从根路径中删除,并将配置直接复制回pod,但也没有运气。
我通过Helm将nginx-ingress(Chart版本0.23.0)作为依赖项引入。
/
位置的Ingress定义 - 这个可以工作
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
certmanager.k8s.io/cluster-issuer: letsencrypt-staging
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
labels:
app: my-app
chart: my-app-0.1.1
heritage: Tiller
release: my-app
name: my-app
namespace: default
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: my-app
servicePort: http
path: /
tls:
- hosts:
- example.com
secretName: mysite-tls
< p>对于/ghost
位置的Ingress定义 - 这个没有起作用。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
nginx.ingress.kubernetes.io/auth-tls-secret: "default/auth-tls-chain"
nginx.ingress.kubernetes.io/auth-tls-verify-depth: "1"
nginx.ingress.kubernetes.io/auth-tls-error-page: "http://www.example.com/error-cert.html"
nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "false"
kubernetes.io/ingress.class: "nginx"
labels:
app: my-app
chart: my-app-0.1.1
heritage: Tiller
release: my-app
name: my-app-secure
namespace: default
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: my-app
servicePort: http
path: /ghost
tls:
- hosts:
- example.com
secretName: mysite-tls