idou老师带你认识Istio13:Istio实现基础认证策略

举报
云容器大未来 发表于 2019/01/29 10:06:23 2019/01/29
【摘要】 微服务架构提供了更好的灵活性、可伸缩性以及服务复用的能力,但,微服务也有特殊的安全需求,Istio Security尝试提供全面的安全解决方案。为了提供灵活的服务访问控制,需要双向 TLS 和细粒度的访问策略。Istio 提供两种类型的身份验证:传输身份验证和来源身份验证。通过配置不同级别的认证策略,可以快速控制不同的安全访问粒度。

前言

微服务架构提供了更好的灵活性、可伸缩性以及服务复用的能力,但,微服务也有特殊的安全需求,Istio Security尝试提供全面的安全解决方案。为了提供灵活的服务访问控制,需要双向 TLS 和细粒度的访问策略。Istio 提供两种类型的身份验证:传输身份验证和来源身份验证。通过配置不同级别的认证策略,可以快速控制不同的安全访问粒度。





典型的使用场景:



1.在未启用双向TLS的安装好 Istio 的 Kubernetes 集群中,需要快速启用全网格双向TLS;

2.网格内某些服务之间需要使用双向TLS,可以将这些服务放入同一命名空间并在命名空间启用双向TLS;

3.当单个服务需要启用TLS时,可以在配置策略中通过spec字段指定;




认证策略是对服务收到的请求生效的,要在双向 TLS 中指定客户端认证策略,需要在DetinationRule 中设置 TLSSettings,每个认证策略需要和目的地规则共同生效。下面通过实例来演示在不同存储范围内配置传输身份认证策略的过程,来源身份验证通过spec中的origins字段指定。



环境准备:装好istio的集群,禁用全局双向TLS;Httpbin应用镜像和sleep应用镜像


1.创建命名空间、部署应用

创建3个命名空间:foo、bar、legacy,foo和bar中部署带sidecar的httpbin应用和sleep应用,legacy中部署不带sidecar的httpbin应用和sleep应用。

0129_13.jpg

0129_14.jpg

0129_15.jpg

将sleep作为客户端,httpbin作为服务端,验证客户端服务端可达性

0129_16.jpg


2.验证系统中目前不存在认证策略

0129_17.jpg

0129_18.jpg

可以看到在foo、bar和legacy命名空间中没有任何策略和规则


3.为网格中的所有服务启用双向TLS认证

配置网格认证策略:

0129_19.jpg

配置目的地规则:

0129_20.jpg

需要注意的是,网格范围内的认证策略名称必须是default,其它名称的策略都会被拒绝和忽视,它的策略类型是MeshPolicy,不同于其它级别的策略类型

这些认证策略和目的地规则有效地配置了所有的sidecars,使服务在双向TLS模式下收发请求。但是对不带sidecar的服务并不适用。

0129_21.jpg

可以看到上面有两种连接不适用:从带有 sidecar 的客户端到不带 sidecar 的服务端的连接以及从不带 sidecar 的客户端到带有 sidecar 的服务端的连接。


为了修复从带有 sidecar 的客户端到不带 sidecar 的服务端的连接,可以专门为这些服务端添加目的地规则来覆盖 TLS 设置:

0129_22.jpg

重新测试连接

0129_23.jpg

当启用全局双向 TLS 认证时,这种方法也可以用来配置 Kubernetes 的 API 服务器。


从不带 sidecar 的客户端到带有 sidecar 的服务端(工作在双向 TLS 模式)的连接,唯一的选择是从双向 TLS 模式切换到 PERMISSIVE 模式,该模式允许服务端接收 HTTP 或(双向) TLS 流量

0129_24.jpg

从 sleep.legacy 到 httpbin.foo 的请求应当是成功的,但是到 httpbin.bar 的请求依然会失败。

0129_25.jpg


4. 为一个命名空间中的所有服务启用双向TLS

可以配置策略为每一个命名空间单独启用双向 TLS 而不必启用全局双向 TLS:

0129_26.jpg


注意:命名空间范围内的策略必须命名为 default,并且不限定任何特定的服务(没有 targets 设置域)


添加相应的目的地规则:

0129_27.jpg

测试连接:

0129_28.jpg

由于当前配置的策略和目的地规则只对命名空间foo有效,可以看到,只有从不带 sidecar 的客户端 (sleep.legacy) 到 httpbin.foo 的请求会失败。


5.为单个服务启用双向TLS

你也可以为某个特定的服务设置认证策略和目的地规则。执行以下命令只为 httpbin.bar 服务新增一项策略。

0129_29.jpg

配置目的地规则:

0129_30.jpg

 

6. 同时启用命名空间层级和服务层级

假设我们已经为命名空间 foo 中所有的服务添加了启用双向 TLS 的命名空间层级的策略并且观察到从 sleep.legacy 到 httpbin.foo 的请求都失败了(见上文)。现在专门为 httpbin 服务添加额外的策略来禁用双向 TLS (peers 域留空):

0129_31.jpg

0129_32.jpg

0129_33.jpg

可以看到服务层级的策略覆盖了命名空间层级的策略,连接成功。

   

通过以上步骤,我们知道如何在不同层级配置认证策略和目的地规则。


相关服务请访问https://support.huaweicloud.com/cce/index.html?cce_helpcenter_2019

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。