使用 Istio CNI 支持强安全 TKE Stack 集群的服务网格流量捕获

作者

陈计节,企业应用云原生架构师,在腾讯企业 IT 负责云原生应用治理产品的设计与研发工作,主要研究利用容器集群和服务网格等云原生实践模式降低微服务开发与治理门槛并提升运营效率。

摘要

给需要快速解决问题的集群管理员: 在 TKE Stack 中正确安装 Istio CNI 有两种方式:如果你的 TKE Stack 集群所使用 Galaxy 版本可以支持 cniVersion 0.3.1,请以默认的方式安装 Istio CNI;否则请使用以“网卡插件”的方式安装 Istio CNI,并在创建 Pod 时指定使用集群默认网络名称。 如果你发现你的 TKE Stack 集群安装完 Istio CNI 之后,无法创建新的 Pod,请立即卸载已安装的 Istio CNI,并手动恢复各个节点上写入的 Galaxy 配置文件:将 /etc/cni/net.d/00-galaxy.conflist 文件内的 plugins 数组字段的第一个元素提取出来,并保存为单独的 conf 文件: /etc/cni/net.d/00-galaxy.conf。删除正在创建中、但无法成功的 Pod,等待其重建,Pod 的创建功能应该能自动恢复。

Istio 是流行的服务网格软件,它通过向业务 Pod 注入可捕获出入口流量的代理软件 Envoy 作为 Sidecar 来完成对流量的观测与治理。

Istio 为了让 Envoy 代理能够捕获来去业务容器的流量,需要向 Pod 所在网络下发如下 IPTABLES 规则:

*nat
-N ISTIO_INBOUND
-N ISTIO_REDIRECT
-N ISTIO_IN_REDIRECT
-N ISTIO_OUTPUT
-A ISTIO_INBOUND -p tcp --dport 15008 -j RETURN
-A ISTIO_REDIRECT -p tcp -j REDIRECT --to-ports 15001
-A ISTIO_IN_REDIRECT -p tcp -j REDIRECT --to-ports 15006
-A PREROUTING -p tcp -j ISTIO_INBOUND
-A ISTIO_INBOUND -p tcp --dport 22 -j RETURN
-A ISTIO_INBOUND -p tcp --dport 15090 -j RETURN
-A ISTIO_INBOUND -p tcp --dport 15021 -j RETURN
-A ISTIO_INBOUND -p tcp --dport 15020 -j RETURN
-A ISTIO_INBOUND -p tcp -j ISTIO_IN_REDIRECT
-A OUTPUT -p tcp -j ISTIO_OUTPUT
-A ISTIO_OUTPUT -o lo -s 127.0.0.6/32 -j RETURN
-A ISTIO_OUTPUT -o lo ! -d 127.0.0.1/32 -m owner --uid-owner 1337 -j ISTIO_IN_REDIRECT
-A ISTIO_OUTPUT -o lo -m owner ! --uid-owner 1337 -j RETURN
-A ISTIO_OUTPUT -m owner --uid-owner 1337 -j RETURN
-A ISTIO_OUTPUT -o lo ! -d 127.0.0.1/32 -m owner --gid-owner 1337 -j ISTIO_IN_REDIRECT
-A ISTIO_OUTPUT -o lo -m owner ! --gid-owner 1337 -j RETURN
-A ISTIO_OUTPUT -m owner --gid-owner 1337 -j RETURN
-A ISTIO_OUTPUT -d 127.0.0.1/32 -j RETURN
-A ISTIO_OUTPUT -j ISTIO_REDIRECT
COMMIT

在常规安装模式下,下发 IPTABLES 规则的操作,是通过与 Envoy 代理容器一同注入的初始化容器 istio-init 完成的。向 Pod 网络下发 IPTABLES 规则要求 Pod 可以使用 NET_ADMIN 和 NET_RAW 两个高权限功能(Capabilities)。Linux 将传统与超级用户 root 关联的特权划分为不同的单元,称为 Capabilites。Capabilites 每个单元都可以独立启用和禁用。这样当系统在做权限检查的时候就检查特定的 Capabilites,并决定当前用户其进程是否可以进行相应特权操作。比如如果要设置系统时间,就得具有 CAP_SYS_TIME 这个 Capabilites。

Istio 流量捕获功能面临的安全挑战

容器本质上是是宿主机上运行的进程,虽然容器运行时默认只向容器提供必要 Capabilities,但如果使用 --privileded 模式运行容器,或者向容器追加更多 C

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值