我正在尝试为双向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以及两者之间的区别。

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

  • 只需使用常规TLS代替mTLS
  • 不管IP地址如何,使群集中的服务都需要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
    

  • 08-03 13:17