【发布时间】:2021-06-28 06:44:45
【问题描述】:
我创建了一个 GKE 集群 1.18.17-gke.1901 并在其上安装了 Istio 1.9.5。我的入口网关服务是type: LoadBalancer。
我正在尝试在我的istio-ingressgateway 中实现MUTUAL TLS 模式。网关配置如下所示:
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: mutual-domain
namespace: test
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- mutual.domain.com
port:
name: mutual-domain-https
number: 443
protocol: HTTPS
tls:
credentialName: mutual-secret
minProtocolVersion: TLSV1_2
mode: MUTUAL
我也设置了相应的 VirtualService 和 DestinationRule。
现在,每当我尝试连接到 https://mutual.domain.com 时,都会收到以下错误:
* Trying 100.50.76.97...
* TCP_NODELAY set
* Connected to mutual.domain.com (100.50.76.97) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/cert.pem
CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to mutual.domain.com:443
* Closing connection 0
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to mutual.domain.com:443
如果我将tls: mode: 更改为SIMPLE,我可以通过域名访问该服务,但是当它是MUTUAL 时,就会出现上述错误。
mutual-secret 是一个 tls 类型的 Kubernets 机密,它包含 tls.crt 和 tls.key。
$ kubectl describe mutual-secret
Name: mutual-secret
Namespace: istio-system
Labels: <none>
Annotations: <none>
Type: kubernetes.io/tls
Data
====
tls.crt: 4585 bytes
tls.key: 1674 bytes
有什么遗漏吗?为什么我无法在MUTUAL 模式下访问我的服务,但同样的秘密适用于SIMPLE 模式?
【问题讨论】:
-
如果可能,请包含
kubectl describe secret mutual-secret的输出 -
@PawełGrondal 我已经编辑了我的问题并添加了
kubectl describe secret mutual-secret的输出。 -
我假设你在关注this。似乎您的秘密中缺少
ca.crt。使用tls.crt、tsl.key和ca.crt创建一个新密钥,然后重试。 -
@PawełGrondal 是的,我错过了
car.crt,但是在提供它之后,每当我尝试在浏览器ERR_BAD_SSL_CLIENT_AUTH_CERT中访问 URL 时,我都会遇到另一个错误
标签: ssl google-kubernetes-engine istio