我正在尝试为双向TLS配置nginx-ingress,但仅针对特定的远程地址。我尝试使用代码段,但未成功:
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($remote_addr = 104.214.x.x) {
auth-tls-verify-client: on;
auth-tls-secret: namespace/nginx-ca-secret;
auth-tls-verify-depth: 1;
auth-tls-pass-certificate-to-upstream: false;
}
auth-tls批注在用作批注时起作用,但在代码片段内却不起作用。
任何想法如何配置此或可能的解决方法,以使其工作?
最佳答案
mTLS的工作基本上是通过要求客户端出示证书来限制对服务的访问。如果您公开一项服务,然后仅要求具有特定IP地址的客户端出示证书,那么全世界其他地方仍然可以在没有证书的情况下访问您的服务,这完全使mTLS失效。
如果需要更多信息,请here is a good article解释为什么存在TLS和mTLS以及两者之间的区别。
可以通过两种方法进行明智的设置:
如果选择选项2,则需要将服务本身配置为使用mTLS,然后配置入口以将客户端证书传递给服务。这是nginx入口的示例配置,将与需要mTLS的服务一起使用:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mtls-sample
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "https"
nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true"
spec:
rules:
- http:
paths:
- path: /hello
backend:
serviceName: mtls-svc
servicePort: 443