限制 Google HTTP(S) LoadBalancer 使用 GKE 中的 Kubernetes Ingress 使用的 SSL 协议

Limit SSL protocols to be used by Google HTTP(S) LoadBalancer with Kubernetes Ingress in GKE

我们正在使用托管在 Google Kubernetes Engine 上的 Kubernetes v1.19.13。我们想要配置一个 Ingress 控制器,以便 Google HTTP(S) LoadBalancer 配置为仅允许 TLS 1.2 和 1.3 以及这些 features/ciphers:

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256

我们更愿意使用注释来执行此操作,但我们发现的大多数示例都使用 ConfigMap 或 FrontendConfig。

是否可以使用注释进行配置?如果没有,推荐的实现方式是什么?

请注意,我们要使用 Kubernetes 而不是使用 Google 云控制台进行配置。

  1. 要将 Ingress 控制器配置为仅允许 TLS 1.2 和 1.3,您可以使用 ngnix.ingress.kubernetes.io/proxy-ssl-protocols 注释。 nginx.ingress.kubernetes.io/proxy-ssl-protocols:启用指定的 protocols 请求代理 HTTPS 服务器。

    例如: 注释["nginx.ingress.kubernetes.io/proxy-ssl-protocols"] = "TLSv1.2 TLSv1.3"

  2. 要将 Ingress 控制器配置为密码,您可以使用 ngnix.ingress.kubernetes.io/proxy-ssl-ciphers 注释。 nginx.ingress.kubernetes.io/proxy-ssl-ciphers:指定启用ciphers for requests to a proxied HTTPS server. The ciphers are specified in the format understood by the OpenSSL library.

使用 ssl_ciphers 注释将在服务器级别设置 ssl_ciphers 指令。此配置对主机中的所有路径均有效。

例如密码:

nginx.ingress.kubernetes.io/ssl-ciphers: "ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP"

参考SSL-ciphers了解更多信息。

您将无法使用注释来执行此操作。您目前无法通过注释创建 SSL 策略。 SSL 政策需要 created 通过 gcloud CLI 或通过 GCP API.

然后您需要创建引用该策略的 FrontendConfig 资源,然后将其附加到您的入口资源:

apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
  name: FRONTENDCONFIG_NAME
spec:
  sslPolicy: allowed-ciphers

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    networking.gke.io/v1beta1.FrontendConfig: "FRONTENDCONFIG_NAME"
...

好消息是您可以(重新)使用 SSL 策略 and/or FrontendConfig。

如果您想通过 k8s API 完成所有操作,您可以尝试使用 Config Connector and create ComputeSSLPolicy 资源。