我正在尝试使用kubernetes入口注释规则来启用X509身份验证。 我的入口Yaml文件定义如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: bdf-opengie-test
name: keycloak-opengie-test-ssl
labels:
app: keycloak-opengie
annotations:
nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
nginx.ingress.kubernetes.io/auth-tls-secret: "opengie-tls-secret"
nginx.ingress.kubernetes.io/auth-tls-verify-depth: "3"
nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true"
spec:
rules:
- host: keycloak-opengie-test-ssl.bdf-clu4.paas.eclair.local
http:
paths:
- path: /
backend:
serviceName: keycloak-opengie
servicePort: http
tls:
- hosts:
- keycloak-opengie-test-ssl.bdf-clu4.paas.eclair.local
当我调用应用程序URL时,我期望看到一个弹出窗口要求提供证书,但是没有任何反应。 注释在入口定义中似乎没有任何作用。 有人可以告诉我我的入口定义出了什么问题。 我正在使用Nginx Ingress:0.15.0和Kubernetes 1.10.5
答案 0 :(得分:4)
首先,您不知道为您的域发布的SSL文件的秘密。 (如果我们在谈论本地k8s秘密管理),则您的秘密应通过以下方式创建:
kubectl --namespace bdf-opengie-test create secret tls <secret_name> --key <key_path> --cert <cert_path>
然后您的Ingress
.yml文件应包含以下秘密:
...
tls:
- hosts:
- keycloak-opengie-test-ssl.<domain>
secretName: <secret_name>
只有在此之后,您才能考虑auth的任何注释或不起作用的其他内容
注意:机密是一个命名空间对象。
答案 1 :(得分:0)
ingress:
hostname: id.login.example.com
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: "more_clear_input_headers \"x-forwarded-client-cert\";\n more_set_input_headers \"x-forwarded-client-cert: $ssl_client_cert\";\n"
nginx.ingress.kubernetes.io/server-snippet: |
ssl_verify_client on;
ssl_client_certificate /etc/nginx/truststore-development.crt;
ssl_verify_depth 2;
ssl_session_cache off;