尝试访问作为 HTTPS 入口部署在 GKE 中的应用程序时出现密码不匹配错误
Cipher mismatch error while trying to access an app deployed in GKE as HTTPS Ingress
我正在尝试在 8080 端口上部署一个 springboot 应用程序 运行。我的目标是使用 google managed-certificates 为自定义子域设置 https 协议。
这是我的 yaml。
- deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
namespace: my-namespace
spec:
replicas: 1
selector:
matchLabels:
app: my-deployment
namespace: my-namespace
template:
metadata:
labels:
app: my-deployment
namespace: my-namespace
spec:
containers:
- name: app
image: gcr.io/PROJECT_ID/IMAGE:TAG
imagePullPolicy: Always
ports:
- containerPort: 8080
resources:
requests:
memory: "256Mi"
ephemeral-storage: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
ephemeral-storage: "512Mi"
cpu: "250m"
2.service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: my-namespace
annotations:
cloud.google.com/backend-config: '{"default": "my-http-health-check"}'
spec:
selector:
app: my-deployment
namespace: my-namespace
type: NodePort
ports:
- port: 80
name: http
targetPort: http
protocol: TCP
- ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: my-name-space
annotations:
kubernetes.io/ingress.global-static-ip-name: my-ip
networking.gke.io/managed-certificates: my-cert
kubernetes.io/ingress.class: "gce"
labels:
app: my-ingress
spec:
rules:
- host: my-domain.com
http:
paths:
- pathType: ImplementationSpecific
backend:
service:
name: my-service
port:
name: http
我遵循了各种文档,其中大部分可以帮助使 http 正常工作,但无法使 https 正常工作并以错误结束 ERR_SSL_VERSION_OR_CIPHER_MISMATCH。看起来“全局转发规则”存在问题。端口显示 443-443。在负载均衡器处终止 HTTPS 流量并使用 http 将其路由到后端应用程序的正确方法是什么?
根据提供的信息,我可以看到缺少“ManagedCertificate”对象,您需要创建一个结构如下的yaml文件:
apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
name: my-cert
spec:
domains:
- <your-domain-name1>
- <your-domain-name2>
然后用命令应用它:kubectl apply -f file-name.yaml
配置 Google-managed 证书最多可能需要 60 分钟;您可以使用以下命令检查证书的状态:kubectl describe managedcertificate my-cert
,等待状态为“Active”。
不过,您需要了解一些先决条件:
- 您必须拥有该域名。域名不得超过
63 个字符。您可以使用 Google Domains 或其他注册商。
- 集群必须启用
HttpLoadBalancing
add-on。
- 您的
"kubernetes.io/ingress.class"
必须是 "gce"
。
- 您必须在同一应用程序中申请
Ingress
和 ManagedCertificate
资源
项目和命名空间。
- 创建 reserved (static) external IP address。保留静态 IP
地址保证它仍然是你的,即使你删除了
入口。如果您不保留 IP 地址,它可能会更改,
要求您重新配置域的 DNS 记录。
最后,您可以在 Creating an Ingress with a Google-managed certificate 上查看完整的 Google 指南。
我正在尝试在 8080 端口上部署一个 springboot 应用程序 运行。我的目标是使用 google managed-certificates 为自定义子域设置 https 协议。 这是我的 yaml。
- deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
namespace: my-namespace
spec:
replicas: 1
selector:
matchLabels:
app: my-deployment
namespace: my-namespace
template:
metadata:
labels:
app: my-deployment
namespace: my-namespace
spec:
containers:
- name: app
image: gcr.io/PROJECT_ID/IMAGE:TAG
imagePullPolicy: Always
ports:
- containerPort: 8080
resources:
requests:
memory: "256Mi"
ephemeral-storage: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
ephemeral-storage: "512Mi"
cpu: "250m"
2.service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: my-namespace
annotations:
cloud.google.com/backend-config: '{"default": "my-http-health-check"}'
spec:
selector:
app: my-deployment
namespace: my-namespace
type: NodePort
ports:
- port: 80
name: http
targetPort: http
protocol: TCP
- ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: my-name-space
annotations:
kubernetes.io/ingress.global-static-ip-name: my-ip
networking.gke.io/managed-certificates: my-cert
kubernetes.io/ingress.class: "gce"
labels:
app: my-ingress
spec:
rules:
- host: my-domain.com
http:
paths:
- pathType: ImplementationSpecific
backend:
service:
name: my-service
port:
name: http
我遵循了各种文档,其中大部分可以帮助使 http 正常工作,但无法使 https 正常工作并以错误结束 ERR_SSL_VERSION_OR_CIPHER_MISMATCH。看起来“全局转发规则”存在问题。端口显示 443-443。在负载均衡器处终止 HTTPS 流量并使用 http 将其路由到后端应用程序的正确方法是什么?
根据提供的信息,我可以看到缺少“ManagedCertificate”对象,您需要创建一个结构如下的yaml文件:
apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
name: my-cert
spec:
domains:
- <your-domain-name1>
- <your-domain-name2>
然后用命令应用它:kubectl apply -f file-name.yaml
配置 Google-managed 证书最多可能需要 60 分钟;您可以使用以下命令检查证书的状态:kubectl describe managedcertificate my-cert
,等待状态为“Active”。
不过,您需要了解一些先决条件:
- 您必须拥有该域名。域名不得超过 63 个字符。您可以使用 Google Domains 或其他注册商。
- 集群必须启用
HttpLoadBalancing
add-on。 - 您的
"kubernetes.io/ingress.class"
必须是"gce"
。 - 您必须在同一应用程序中申请
Ingress
和ManagedCertificate
资源 项目和命名空间。 - 创建 reserved (static) external IP address。保留静态 IP 地址保证它仍然是你的,即使你删除了 入口。如果您不保留 IP 地址,它可能会更改, 要求您重新配置域的 DNS 记录。
最后,您可以在 Creating an Ingress with a Google-managed certificate 上查看完整的 Google 指南。