我在理解 Consul 端到端 TLS 时遇到了一些困难。作为参考,我在 Kubernetes 中使用 Consul(通过hashcorp/consul Helm 图表)。只有一个数据中心和 Kubernetes 集群——没有外部各方或顾虑。
我已经像这样配置了我的覆盖values.yaml文件:
global:
datacenter: sandbox
gossipEncryption:
secretName: "consul"
secretKey: "CONSUL_GOSSIP_ENCRYPTION_KEY"
tls:
enabled: true
httpsOnly: true
enableAutoEncrypt: true
serverAdditionalDNSSANs: ["'consul.service.consul'"]
server:
replicas: 3
bootstrapExpect: 3
storage: 20Gi
dns:
clusterIP: 172.20.53.53
ui:
service:
type: 'LoadBalancer'
syncCatalog:
enabled: true
所有其他值都是随附的values.yaml文件中的默认值。
这可行,Consul 客户端日志表明所有代理区域都使用 TLS 很好地连接,相关证书和密钥是由(据我了解)Consul的自动加密功能创建的。
我不明白的是如何从运行在 Pod 中的 Kubernetes 上的应用程序启动到 Consul 服务器的 HTTPS 连接。由于 Pod 的容器(可能)在其信任库中没有 Consul 根 CA 证书,因此所有 HTTPS 调用都会失败,如下面的wget示例所示:
# Connect to Pod:
laptop$> kubectl exec -it my-pod sh
# Attempt valid HTTPS connection:
my-pod$> wget -q -O - https://consul.service.consul:8501
Connecting to consul.service.consul:8501 (10.110.1.131:8501)
ssl_client: consul.service.consul: certificate verification failed: unable to get local issuer certificate
wget: error getting response: Connection reset by peer
# Retry, but ignore certificate validity issues:
my-pod$> wget --no-check-certificate -q -O - https://consul.service.consul:8501/v1/status/leader
"10.110.1.131:8300"
如果容器不能将证书识别为有效,我应该如何强制从我在 Kubernetes 上的应用程序到 Consul 的端到端(已验证)HTTPS 连接?我对证书传播有误解吗?
非常感谢 - 亚伦