我正在尝试为双向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注释在用作注释时起作用,但在代码片段中却不起作用。
有任何想法如何配置此功能或解决方法以使其正常工作吗?
答案 0 :(得分:0)
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