为啥 GCP LoadBalancer 不支持 ECDSA 证书?
Posted
技术标签:
【中文标题】为啥 GCP LoadBalancer 不支持 ECDSA 证书?【英文标题】:Why GCP LoadBalancer doesn't support the ECDSA certificate?为什么 GCP LoadBalancer 不支持 ECDSA 证书? 【发布时间】:2022-01-13 09:46:08 【问题描述】:我已经在 Google Cloud Platform 上使用前端配置和 ECDSA P-384 TLS 证书创建了 kubernetes 入口,创建过程几秒钟后,我收到了以下错误:
同步到 GCP 时出错:运行负载平衡器同步例程时出错: 负载均衡器 -default--ingress-****** 不存在: 证书创建失败 - k8s2-cr---***** 错误:googleapi: 错误 400:不支持 ECDSA 曲线。, sslCertificateUnsupportedCurve
为什么不支持 ECDSA 曲线?有什么方法可以启用这种支持吗?
创建 tls-secret 命令:
kubectl create secret tls tls --key [key-path] --cert [cert-path]
前端配置:
apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
name: frontend-config
spec:
redirectToHttps:
enabled: true
responseCodeName: MOVED_PERMANENTLY_DEFAULT
入口:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress
namespace: default
labels:
kind: ingress
annotations:
networking.gke.io/v1beta1.FrontendConfig: frontend-config
spec:
tls:
- hosts:
- '*.mydomain.com'
secretName: tls
rules:
- host: mydomain.com
http:
paths:
- path: /*
pathType: ImplementationSpecific
backend:
service:
name: spa-ingress-service
port:
number: 80
- host: api.mydomain.com
http:
paths:
- path: /*
pathType: ImplementationSpecific
backend:
service:
name: api-ingress-service
port:
number: 80
水疗服务:
# SERVICE LOAD BALANCER
apiVersion: v1
kind: Service
metadata:
name: spa-service
labels:
app/name: spa
spec:
type: LoadBalancer
selector:
app/template: spa
ports:
- name: http
protocol: TCP
port: 80
targetPort: http
---
# SERVICE NODE PORT - FOR INGRESS
apiVersion: v1
kind: Service
metadata:
name: spa-ingress-service
labels:
app/name: ingress.spa
spec:
type: NodePort
selector:
app/template: spa
ports:
- name: https
protocol: TCP
port: 80
targetPort: http
API 服务:
# SERVICE LOAD BALANCER
apiVersion: v1
kind: Service
metadata:
name: api-service
labels:
app/name: api
spec:
type: LoadBalancer
selector:
app/template: api
ports:
- name: http
protocol: TCP
port: 80
targetPort: http
---
# SERVICE NODE PORT - FOR INGRESS
apiVersion: v1
kind: Service
metadata:
name: api-ingress-service
labels:
app/name: ingress.api
spec:
type: NodePort
selector:
app/template: api
ports:
- name: https
protocol: TCP
port: 80
targetPort: http
kubectl 描述入口响应:
【问题讨论】:
能否尝试将证书更改为P-256。我认为以下错误是由于与当前使用的P-384证书不兼容所致。 是的,如果我将 SHA-256 与 RSA 加密证书一起使用,它就可以工作。您是否认为这是一个 SHA 位问题而不是 ECDSA? @BakulMitra ECDSA P-384 与我所说的不兼容。但是如果你使用 SHA-256,问题就解决了。 【参考方案1】:gcp load balancer 支持 RSA-2048 或 ECDSA P-256 证书。 DownstreamTlsContexts 还支持多个 TLS 证书。这些可能是 RSA 和 P-256 ECDSA 证书的混合。
以下错误是由于与当前使用的 P-384 证书而不是 P-256 证书不兼容。
有关更多信息,请参阅Load Balancing Overview。
【讨论】:
以上是关于为啥 GCP LoadBalancer 不支持 ECDSA 证书?的主要内容,如果未能解决你的问题,请参考以下文章