httos双向认证配置_idou老师教你学Istio 15:Istio实现双向TLS的迁移

本文由华为云容器Istio团队撰稿,未经允许谢绝转载

众所周知,HTTPS是用来解决 HTTP 明文协议的缺陷,在 HTTP 的基础上加入 SSL/TLS 协议,依靠 SSL 证书来验证服务器的身份,为客户端和服务器端之间建立“SSL”通道,确保数据运输安全。而Istio的双向TLS也用来保证数据传输安全。那么,Istio的双向TLS是如何与HTTPS服务一起工作的呢?

下面通过实例演示Istio的双向TLS是如何与HTTPS服务一起工作的,包括三个部分:

· 在没有 Istio sidecar 的情况下部署 HTTPS 服务

· 关闭 Istio 双向 TLS 认证情况下部署 HTTPS 服务

· 部署一个启动双向 TLS 的 HTTPS 服务。对于每个部署,请求连接到此服务并验证其是否有效。

环境准备

· 未启用双向TLS的安装了Istio的k8s集群

· 安装openssl,生成证书和configmap

通过openssl生成key和证书:

ba180c1ae89745c7389d69917bd46af9.png

从给定的公私钥对创建TLS secret:

f7271b7de3513f286777d421384c38ec.png

使用kubectl创建Configmap:

a6bd849711b5418b1f758629da77860a.png

1. 没有部署sidecar

创建一个不部署sidecar的基于nginx的HTTPS服务,并创建一个部署sidecar的sleep应用来调度nginx

3ee39d568654a75730848a8c9a2e4a78.png

182721d9553c18fa5a9addca42ac5a4b.png

检查上述pod是否正常运行

b3edc725de747e92ce15c8014d0bde3f.png

在pod正常运行时,从sleep应用的istio-proxy容器内访问HTTPS服务:

b1f1991b7e464305d63c44163d9eeb63.png

可以看到,nginx能正常访问。

2. 部署sidecar并禁用双向TLS

删除上一步创建的未部署sidecar的HTTPS服务,并用sidecar部署它

a458ef5846a02981ec2d7298c06e99e8.png

查看pod是否正常启动:

4b3a4c089d5abc8f1c0988a897db96f0.png

在pod正常运行时,从istio-proxy容器运行,可以看到,nginx能正常访问:

ca5e773a3996d6cdbd727d211a4fe754.png

3. 部署sidecar,并启用双向TLS

通过配置网格级别的认证策略启用全局双向TLS,首先配置网格认证策略:

ce7bb829fbf60db439924da2dc5898af.png

配置目的地规则:

1503757efe760e1622b4327ef6f17912.png

此时,网格中的所有服务已经开启了双向TLS功能,从sleep容器中访问nginx是正常的:

b002d35349b79451904c1fbe1acf605d.png

从sleep容器中访问时,工作流为“sleep→sleep-proxy→nginx-proxy→nginx” ,此时,整个过程是7层流量,在sleep-proxy到nginx-proxy之间有一个L4双向TLS加密。

而在istio-proxy中运行时,它无法工作:

2a974ece026c09bc940167a81080c32f.png

此时,工作流为“sleep-proxy→nginx-proxy→nginx”,nginx-proxy会从sleep-proxy中获得双向TLS流量,但是sleep-proxy无法提供客户端证书,因此,它不起作用。

总结:通过上述演示,可以了解到,当istio sidecar使用HTTPS服务部署时,无论是否启用双向TLS功能,代理自动从L7降到L4,所以,它不会终止原来的HTTPS通信。

本文由华为云容器Istio团队撰稿,未经允许谢绝转载


版权声明:本文为weixin_35795357原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。