基于特定IP的双向TLS

时间:2019-04-15 13:30:31

标签: kubernetes kubernetes-ingress nginx-ingress

我正在尝试为双向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注释在用作注释时起作用,但在代码片段中却不起作用。

有任何想法如何配置此功能或解决方法以使其正常工作吗?

1 个答案:

答案 0 :(得分:0)

mTLS的工作基本上是通过要求客户端出示证书来限制对服务的访问。如果您公开一项服务,然后只要求具有特定IP地址的客户端出示证书,那么世界上的其他地方仍然可以在没有证书的情况下访问您的服务,这完全破坏了mTLS的观点。

如果需要更多信息,请here is a good article解释TLS和mTLS存在的原因以及它们之间的区别。

可以通过两种方法进行明智的设置:

  1. 只需使用常规TLS而不是mTLS
  2. 使群集中的服务需要mTLS才能访问它,而不管IP地址如何

如果选择选项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