【发布时间】:2022-07-01 00:08:08
【问题描述】:
我想在 GKE 上使用 Google 托管证书。
我有一个 GKE 集群 (1.22),并针对 CloudDNS 区域配置了 external-dns helm 图表,然后我尝试了:
$ gcloud compute ssl-certificates create managed-cert \
--description "managed-cert" \
--domains "<hostname>" \
--global
$ kubectl create ns test
$ cat <<EOF | kubectl apply -f -
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-mc-deployment
namespace: test
spec:
selector:
matchLabels:
app: products
department: sales
replicas: 2
template:
metadata:
labels:
app: products
department: sales
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-app:2.0"
env:
- name: "PORT"
value: "50001"
---
apiVersion: v1
kind: Service
metadata:
name: my-mc-service
namespace: test
spec:
type: NodePort
selector:
app: products
department: sales
ports:
- name: my-first-port
protocol: TCP
port: 60001
targetPort: 50001
---
apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
name: managed-cert
namespace: test
spec:
domains:
- <hostname>
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-psc-ingress
namespace: test
annotations:
networking.gke.io/managed-certificates: "managed-cert"
ingress.gcp.kubernetes.io/pre-shared-cert: "managed-cert"
kubernetes.io/ingress.class: "gce"
spec:
rules:
- host: "<hostname>"
http:
paths:
- path: "/"
pathType: "ImplementationSpecific"
backend:
service:
name: "my-mc-service"
port:
number: 60001
EOF
DNS 区域已正确更新,我可以浏览 http://<hostname>。
如果我:
$ curl -v https://<hostname>
* Trying 34.120.218.42:443...
* Connected to <hostname> (34.120.218.42) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
* CApath: none
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.0 (IN), TLS header, Unknown (21):
* TLSv1.3 (IN), TLS alert, handshake failure (552):
* error:0A000410:SSL routines::sslv3 alert handshake failure
* Closing connection 0
curl: (35) error:0A000410:SSL routines::sslv3 alert handshake failure
$ gcloud compute ssl-certificates list
NAME TYPE CREATION_TIMESTAMP EXPIRE_TIME MANAGED_STATUS
managed-cert MANAGED 2022-06-30T00:27:25.708-07:00 PROVISIONING
<hostname>: PROVISIONING
mcrt-fe44e023-3234-42cc-b009-67f57dcdc5ef MANAGED 2022-06-30T00:27:52.707-07:00 PROVISIONING
<hostname>: PROVISIONING
即使我指定了它,我也不明白它为什么要创建新的托管证书 (mcrt-fe44e023-3234-42cc-b009-67f57dcdc5ef)。
有什么想法吗?
谢谢
【问题讨论】:
-
我没有看到任何使用 SSLv3 的指标。客户端尝试 TLS 但由于未知原因失败并因此发送警报。检查服务器的 TLS 版本,例如使用ssllabs.com/ssltest 或本地testssl.sh
-
在上述 Ingress Yaml 文件的注释中,您列出了两个证书,分别是托管证书和预共享证书。因此,在输出中我们可以看到两个 SSL 证书。有关specifying certificates for Ingress的更多信息,请参阅链接
-
是的,但我指向的是同一个托管证书。如果我删除 `ingress.gcp.kubernetes.io/pre-shared-cert: "managed-cert"` 会创建另一个托管证书 (
mcrt-XXX)
标签: google-cloud-platform https ssl-certificate certificate google-kubernetes-engine