限制 Google HTTPS 使用的 SSL 协议)在 GKE 中使用 Kubernetes Ingress 的负载均衡器

Posted

技术标签:

【中文标题】限制 Google HTTPS 使用的 SSL 协议)在 GKE 中使用 Kubernetes Ingress 的负载均衡器【英文标题】:Limit SSL protocols to be used by Google HTTP(S) LoadBalancer with Kubernetes Ingress in GKE 【发布时间】:2021-12-12 18:01:24 【问题描述】:

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

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 Cloud Console。

【问题讨论】:

kubernetes.github.io/ingress-nginx/user-guide/… 【参考方案1】:

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

然后,您需要创建一个引用该策略的 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 策略和/或 FrontendConfig。

如果你想通过 k8s API 做任何事情,你可以尝试使用 Config Connector 并创建 ComputeSSLPolicy 资源。

【讨论】:

【参考方案2】:

    要将 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"

    要将 Ingress 控制器配置为密码,您可以使用 ngnix.ingress.kubernetes.io/proxy-ssl-ciphers 注释。 nginx.ingress.kubernetes.io/proxy-ssl-ciphers:指定启用的ciphers 用于对代理HTTPS 服务器的请求。密码以OpenSSL library 理解的格式指定。

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

例如密码:

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

更多信息请参考SSL-ciphers。

【讨论】:

以上是关于限制 Google HTTPS 使用的 SSL 协议)在 GKE 中使用 Kubernetes Ingress 的负载均衡器的主要内容,如果未能解决你的问题,请参考以下文章

python https协议和InsecurePlatformWarning问题

HTTPS 协议和原理

webservice服务用 http协议和https协议的区别

HTTPS协议和原理

golang中最大协程数的限制(线程)

go 中 限制 goroutine 数量以及使用协程池