kubeasz 部署 Kubernetes Dashboard 1.6.3 实战:NodePort、密码认证与证书认证三种访问控制详解
kubeasz 部署 Kubernetes Dashboard 1.6.3 实战NodePort、密码认证与证书认证三种访问控制详解【免费下载链接】kubeasz使用Ansible脚本安装K8S集群介绍组件交互原理方便直接不受国内网络环境影响项目地址: https://gitcode.com/GitHub_Trending/ku/kubeasz本文基于 kubeasz 项目文档 dashboard.1.6.3.md 整理成文。Dashboard 1.6.3 是 Kubernetes 官方 UI 的一个经典版本适合在 k8s ≤ 1.9.1 的集群上使用。本指南完整讲解如何借助 kubeasz 部署 Dashboard 1.6.3并逐一演示 NodePort 临时访问、用户密码basic auth RBAC 授权、客户端证书三种访问控制方式帮助读者既掌握实际操作又深入理解 kubeasz 预置集群的安全基线设计。版本适用性与兼容性说明在使用本指南之前请先确认集群版本满足以下约束本文档基于dashboard 1.6.3版本编写经实际测试k8s 版本 ≤ 1.9.1 支持 dashboard 1.6.3从1.7.x 版本起dashboard 默认开启自带的登录验证界面登录流程与 1.6.3 差异较大建议 k8s 1.9 之后的集群改用新版本 dashboard其部署与登录方式详见 新版本文档。也就是说1.6.3 的登录/鉴权逻辑完全依赖集群侧apiserver 的 TLS、RBAC、basic auth而新版本把登录界面内建到了 dashboard 自身Token 方式这是两者最本质的区别。部署 Dashboard 1.6.3在 kubeasz 部署好的集群 master 节点上依次创建以下资源# 部署 dashboard 主 yaml 配置文件 $ kubectl create -f /etc/kubeasz/manifests/dashboard/1.6.3/kubernetes-dashboard.yaml # 部署基本密码认证配置 [可选]密码文件位于 /etc/kubernetes/ssl/basic-auth.csv $ kubectl create -f /etc/kubeasz/manifests/dashboard/1.6.3/ui-admin-rbac.yaml $ kubectl create -f /etc/kubeasz/manifests/dashboard/1.6.3/ui-read-rbac.yaml其中kubernetes-dashboard.yaml是 dashboard 的主部署清单ui-admin-rbac.yaml与ui-read-rbac.yaml分别用于定义 admin管理员与 readonly只读用户的 RBAC 权限二者是可选配置仅当你希望使用用户名密码方式登录时才需要创建。关于 RBAC 授权有两点需要特别说明kubeasz 预置的 kube-apiserver 启用了 RBAC 授权--authorization-modeNode,RBAC见下文源码分析因此 dashboard 使用的 ServiceAccountkubernetes-dashboard必须拥有访问 apiserver 的权限。在新版本1.8.0 起中该访问权限已按最小化方式授权而在 1.6.3 版本中官方配置较为粗放——直接将kubernetes-dashboard与集群角色cluster-admin绑定这样 dashboard 就拥有了访问 apiserver 的全部权限。在测试环境可以接受但生产环境应谨慎评估。开发测试环境为了方便通常在 dashboard 的 Service 上指定NodePort方式暴露服务这样集群外部可以直接使用http://NodeIP:NodePort访问 dashboard生产环境建议关闭该访问途径改用更严格的方式如证书访问 内网访问控制。验证部署部署完成后可通过以下命令确认运行状态# 查看 pod 运行状态 kubectl get pod -n kube-system | grep dashboard kubernetes-dashboard-86bd8778bf-w4974 1/1 Running 0 12h # 查看 dashboard service kubectl get svc -n kube-system | grep dashboard kubernetes-dashboard NodePort 10.68.7.67 none 80:5452/TCP 12h # 查看集群服务 kubectl cluster-info | grep dashboard kubernetes-dashboard is running at https://192.168.1.10:6443/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy # 查看 pod 运行日志关注有没有错误 kubectl logs kubernetes-dashboard-86bd8778bf-w4974 -n kube-systemPod 处于Running状态、service 类型为NodePort本示例宿主机端口为 5452即说明部署成功日志中若出现 apiserver 访问被拒403/Forbidden之类的错误请回头检查 ServiceAccount 与 RBAC 绑定是否生效。安全设计kubeasz 预置集群的 apiserver 基线因为 dashboard 作为 k8s 原生 UI能够展示各种资源信息甚至具有修改、增加、删除权限所以对访问进行认证和控制十分必要。kubeasz 预置部署的集群在 kube-apiserver 层面做了以下安全设置详见 apiserver 配置模板启用TLS 认证、RBAC 授权等安全特性--authorization-modeNode,RBAC、--client-ca-file、--tls-cert-file等参数关闭 apiserver 非安全端口 8080 的外部访问--insecure-bind-address限制为回环地址源码模板中通过--bind-address{{ inventory_hostname }}绑定内网地址同时仅监听安全端口关闭匿名认证--anonymous-authfalse杜绝未认证请求补充启用基本密码认证--token-auth-file/etc/kubernetes/ssl/basic-auth.csv密码文件按照每行(密码,用户名,序号)的格式组织可以定义多个用户。从当前仓库的 kube-apiserver.service.j2 源码可以看到这些安全参数被模板化地写入 systemd unit 文件--anonymous-authfalse、--authorization-modeNode,RBAC、--secure-port{{ SECURE_PORT }}等均来自集群配置变量。这意味着凡是通过 kubeasz 安装的集群默认就具备上述安全基线dashboard 的三种访问控制都是建立在这一基线之上的。访问方式一临时访问NodePort# 使用 http://NodeIP:NodePort 方式直接访问 dashboard http://NodeIP:NodePort这是最快捷的访问方式适合开发测试环境快速查看集群状态由于缺少身份认证生产环境建议关闭该途径。访问方式二用户 密码访问这种方式安全性比证书方式稍差务必保管好密码文件basic-auth.csv。具体操作如下在 master 节点文件/etc/kubernetes/ssl/basic-auth.csv中确认用户名和密码每行格式为密码,用户名,序号可定义多个用户。如果要增加或修改用户修改保存该文件后记得逐个重启你的 master 节点使 apiserver 重新加载该文件为演示用户密码访问如果你之前已完成证书访问方式可以在浏览器中删除证书或在浏览器询问证书时选择不选证书分别创建 admin 与 readonly 两个用户的 RBAC 权限。2.1 设置用户 admin 的 RBAC 权限运行kubectl create -f ui-admin-rbac.yaml内容如下kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: ui-admin rules: - apiGroups: - resources: - services - services/proxy verbs: - * --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: ui-admin-binding namespace: kube-system roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: ui-admin subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: admin要点ClusterRole ui-admin对services与services/proxy两个资源授予所有动词*RoleBinding ui-admin-binding位于kube-system命名空间将集群角色ui-admin绑定给用户admin用户名与basic-auth.csv中的第二列一致。2.2 设置用户 readonly 的 RBAC 权限运行kubectl create -f ui-read-rbac.yaml内容如下kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: ui-read rules: - apiGroups: - resources: - services - services/proxy verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: ui-read-binding namespace: kube-system roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: ui-read subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: readonly要点ui-read角色仅授予get、list、watch三个只读动词与ui-admin形成最小权限对照。2.3 使用密码登录验证权限浏览器访问https://x.x.x.x:6443/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy使用admin登录拥有所有权限例如可以删除某个 Deployment使用readonly登录只有查看权限尝试删除某个部署会提示错误forbidden: User readonly cannot delete services/proxy in the namespace kube-system这一报错信息直观体现了 RBAC 的按用户授权、按动作放行机制readonly 用户虽然在 apiserver 的 basic auth 中通过了身份认证但在授权环节被ui-read角色的动词集合挡住了写操作。访问方式三证书访问这是最安全的方式但配置相对复杂使用集群 CA 生成客户端证书。可以根据需要生成权限不同的证书这里为了演示直接使用 kubectl 使用的证书和 key在 kubeasz 的 03.kubectl.yml 阶段生成该证书拥有所有权限以指定格式导出该证书。进入/etc/kubernetes/ssl目录执行openssl pkcs12 -export -in admin.pem -inkey admin-key.pem -out kube-admin.p12执行后提示输入证书密码和确认密码可以用密码再增加一层保护也可以直接回车跳过。完成后目录下会多出kube-admin.p12文件将它分发给授权的用户即可用户将kube-admin.p12双击导入证书后在IE和Chrome中访问https://x.x.x.x:6443/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy # 或者 https://x.x.x.x:6443/ui补充最新的 firefox 需要在浏览器中单独导入证书路径为[选项] - [隐私与安全] - [证书/查看证书] - [您的证书]点击[导入]选择该证书即可。小结dashboard 1.6.3 的访问控制实现较为复杂本文给出的例子也有助于你理解 RBAC 的灵活控制能力建议进一步学习官方 RBAC 文档篇幅不长掌握ClusterRole/RoleBinding/User的组合方式由于当时尚未部署 Heapster 插件dashboard 1.6.3 不能展示 Pod、Nodes 的 CPU、内存等 metric 图形后续部署 Heapster 后即可看到监控图形本文中的权限设置仅供演示用生产环境请在此基础上修改成适合你安全需求的方式例如收缩ui-admin的动词与资源范围、使用独立的客户端证书、关闭 NodePort 暴露等。参考与版本演进新版 dashboard7.x基于 helm chart 安装、Token 登录见 dashboard.md其部署逻辑在 dashboard.yml 中通过helm upgrade kubernetes-dashboard --install完成并由 dashboard-values.yaml.j2 控制参数中间版本见 dashboard.2.x.mdkubeasz 完整的集群安装流程参见 quickStart.md。【免费下载链接】kubeasz使用Ansible脚本安装K8S集群介绍组件交互原理方便直接不受国内网络环境影响项目地址: https://gitcode.com/GitHub_Trending/ku/kubeasz创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →