作者|郝树伟(流生)
以 Kubernetes 为代表的云原生技术不仅屏蔽了各个云厂商和数据中心在基础设施上的差异性,还使得利用能够在不同的云上应用标准化的形式形容和部署运行。在此基础之上,咱们才能够低成本治理处于任何地理位置的 Kubernetes 集群。本文将次要为您介绍如何实现对公共云 ACK 集群和数据中心自建 Kubernetes 集群统一体验的集群治理和平安治理。
ACK 注册集群平安架构
要实现对公共云 ACK 集群和数据中心自建 Kubernetes 集群统一体验的集群治理和平安治理,就必须先将其对立到同一管制立体,ACK 注册集群容许处于任何地理位置的自建 Kubernetes 集群通过公网或私网(云上云下网络买通)连贯端点接入阿里云容器服务管理系统。上面是 ACK 注册集群的架构示意图:
在 ACK 注册集群架构示意图中,次要包含以下几个组成部分:
- ACK 容器服务控制台。
- ACK 注册集群 Agent 组件:Agent 组件以 Deployment 的模式部署在自建 Kubernetes 集群中(或者其余云厂商的容器集群中),用于接管 ACK 注册集群 Stub 组件(应用 ACK 容器服务控制台或 ACK 注册集群 kubeconfig)下发的申请,并将其转发给指标集群的 Kubernetes API Server,同时接管 Kubernetes API Server 的响应并将其发送回 Stub 组件。
- ACK 注册集群 Stub 组件:Stub 组件部署的容器服务管控侧,每一个注册集群都对应一个 Stub 组件,用于代理转发 ACK 容器服务控制台或 ACK 注册集群 kubeconfig 拜访集群产生的申请,转发到 Agent 组件并接管来自 Agent 组件的响应,最终返回响应到用户端。
- Kubernetes API Server:指标自建 Kubernetes 集群或其余云厂商容器集群的 Kubernetes API Server。
单向注册双向通信
后面咱们提到,ACK 注册集群能够接入处于任何地理位置的自建 Kubernetes 集群,数据中心内自建的 Kubernetes 集群有一个特点就是通常状况下,这些自建集群处于一个受限的公有网络环境下,只能集群出公网拜访外部环境。ACK 注册集群为了解决这个问题,将 Stub/Agent 组件设计为 Agent 被动单向注册到 Stub 组件,Agent 连贯 Stub 时,会带上事后生成的 token 和证书等信息进行验证,整个通信链路采纳 TLS 协定确保数据加密。
非“托管式”平安接入机制
通过 ACK 注册集群将自建 Kubernetes 集群接入到阿里云容器服务管控零碎,用户最大的平安担心就是自有集群拜访权限的治理和管制,咱们通过以下几点来保障用户对自有集群的相对安全控制。
- ACK 管控侧不存储用户自有集群的任何秘钥信息。用户自建 Kubernetes 集群领有本人的一套证书体系,如果 ACK 注册集群应用用户自建 Kubernetes 集群的 kubeconfig 对其进行拜访,那么势必会造成用户集群拜访权限的不可控。实际上,无论是从平安角度思考,还是从管控侧一致性体验的角度思考,都要求咱们通过 ACK 注册集群来屏蔽管控侧与用户自建集群证书体系的差异性。那么具体的解法就是管控侧会应用 ACK 对立颁发的证书体系拜访注册集群 Stub 组件,在 Stub 和 Agent 组件实现申请认证后,经由 Agent 以身份表演的形式向指标 API Server 作 7 层代理转发,最终在 API Server 实现申请的 RBAC 鉴权和审计,如下图所示。
- 集群拜访权限的管控收敛到 Agent 组件。Agent 组件部署在用户自建集群中,ACK 管控侧通过 Stub/Agent 链路拜访用户自建集群的权限收敛在 Agent 组件侧,这样能够保障用户对自有集群拜访权限的全权管制。
- Agent 组件“非侵入式”部署。Agent 组件以 Deployment 的模式部署在自建 Kubernetes 集群中,不对自建集群做任何更改和操作,后续会将 Agent 组件的源码开源进去。
- 反对开启平安审计。用户能够在注册集群中开启平安审计性能,任何对集群的操作都能够进行查问和审计。
统一体验的集群治理
假如以后用户 A 曾经在公共云创立了一个 ACK 集群,在数据中心内创立了一个自建 Kubernetes 集群,那么如何应用统一的体验来治理这两个处于不同云环境的 Kubernetes 集群呢?很简略,创立一个 ACK 注册集群并接入自建集群即可。
创立 ACK 注册集群
咱们只需在 ACK 容器服务控制台创立注册集群页面抉择离自建 Kubernetes 集群地理位置最近的区域并配置 VPC 网络和平安组,3 分钟即可实现注册集群的创立,如下图所示。
集群详情页面能够看到连贯信息中别离有一个用于公网接入和私网接入自建 Kubernetes 集群的集群导入代理配置,如下图所示:
接入自建 Kubernetes 集群
在自建 Kubernetes 集群中部署上述集群导入代理配置:
$ kubectl apply -f agent.yaml
agent 组件运行失常后,咱们就能够在 ACK 容器服务控制台查看集群列表,如下图所示,名为 ack 的集群为 ACK 托管版集群,Kubernete 版本为 1.20.4-aliyun.1,名为 idc-k8s 的集群为 ACK 注册集群,接入的是用户自建的 Kubernetes 集群,Kubernetes 版本为 1.19.4。
应用注册集群 idc-k8s 即可治理自建 Kubernetes 集群,集群概览信息和节点列表信息如下图所示。
接下来,用户就能够通过 ACK 容器服务控制台,应用统一体验来对云上云下集群进行集群治理、节点治理、利用治理和运维等操作。
统一体验的平安治理
在应用不同云平台上的 Kubernetes 集群时,不同云平台的平安治理能力和安全策略配置及治理形式也都不尽相同,这种参差不齐的平安治理能力会导致运维团队在定义用户角色、拜访权限的时候都每个云平台的平安管理机制都非常相熟,如果治理和平安访问控制能力有余,则非常容易呈现角色违规、拜访治理危险等问题。
例如,在一个各种我的项目都在应用 Kubernetes 容器集群,且容器集群属于不同的云平台的场景下,管理员须要可能将所有用户和他们的流动都疏导到对应的容器集群,这样能力晓得谁在什么时候做了什么,你可能会遇到有多个账户须要别离设置不同的拜访层级,或者有越来越多的人退出、来到、变换团队和我的项目的状况,如何治理这些用户的权限会变得越来越简单。
ACK 注册集群从以下几个方面为自建 Kubernetes 集群提供平安治理能力一致性体验。
应用阿里云奴才账号认证体系和 Kubernetes RBAC 鉴权体系治理集群访问控制
假如以后企业内有 2 个不同工作职责的用户,别离是开发人员 testuser01,测试人员 testuser02,那么管理员就能够为开发和测试人员创立子账号 testuser01 和 testuser02,接下来依据开发测试人员工作职责的不同,调配 ack 集群和 idc-k8s 集群的以下权限:
- 开发人员 testuser01,授予 ack 集群所有命名空间的读写权限,授予 idc-k8s 集群 test 命名空间的读写权限。
- 测试人员 testuser02,只授予 idc-k8s 集群 test 命名空间的读写权限。
应用主账号为开发人员 testuser01 和测试人员 testuser02 受权,在 ACK 容器服务控制台受权治理中抉择对应的 testuser01 和 testuser02 子账号,受权配置别离如下图所示:
依照向导实现 testuser01 和 testuser02 的受权后,应用子账号 testuser01 登录容器服务控制台能够测试 testuser01 对 ack 集群所有命名空间领有读写权限,只对 idc-k8s 集群 test 命名空间领有读写权限。
应用子账号 testuser02 登录容器服务控制台能够测试 testuser02 看不到 ack 集群,且只对 idc-k8s 集群 test 命名空间领有读写权限。
集群审计
在 Kubernetes 集群中,API Server 的审计日志能够帮忙集群管理人员记录或追溯不同用户的日常操作,是集群平安运维中重要的环节。在注册集群中能够应用集群审计性能帮忙用户可视化追溯不同用户的日常操作。
上面是自建 Kubernetes 集群的日志审计示例。
配置巡检
配置巡检性能能够用来扫描集群中 Workload 配置的安全隐患,提供巡检详情和报告,对后果进行剖析解读,帮忙用户实时理解以后状态下运行利用的配置是否有安全隐患。
上面是自建 Kubernetes 集群的巡检详情示例。
作者简介
郝树伟(流生),阿里云容器服务技术专家,云原生分布式云团队核心成员,专一于云原生多集群的对立治理和调度、混合集群、利用交付和迁徙等云原生技术的钻研。
点击下方链接,查看相干视频解读~
https://www.bilibili.com/vide…