我正在设置一个 ghost 实例,并尝试通过客户端证书验证来保护 /ghost 路径。
我已经启动并运行了一个初始入口,它使用指定为 / 的路径非常愉快地为该站点提供服务。
我正在尝试为 /ghost 路径添加第二个入口(几乎相同)。如果我这样做并添加基本身份验证的注释,一切似乎都有效。即,如果我浏览到 /ghost,系统会提示我输入基本身份验证密钥中的凭据,如果我浏览到任何其他 URL,它会在没有身份验证的情况下提供。
然后我根据这个例子切换到客户端证书验证:https ://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/auth/client-certs
当我尝试整个站点或没有站点是安全的,而不是基于路径的分离时,我得到了基本身份验证。从正在运行的 pod 中查看 nginx.conf, proxy_set_header ssl-client-verify
在根 / 路径和 /ghost 路径下添加了proxy_set_header ssl-client-subject-dn
&proxy_set_header ssl-client-issuer-dn
元素。我已经尝试删除这些(仅从根目录)并将配置直接复制回 pod,但也没有运气。
我通过 Helm 将 nginx-ingress(图表版本 0.23.0)作为依赖项
位置的入口定义/
- 这个有效
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
位置的入口定义/ghost
- 这个不起作用
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