Kubernetes 层级命名空间 HNC - 3 Why
为什么使用 namespaces? 在深入讨论层级空间前,我们有必要先考虑一下为何 Kubernetes 使用了命名空间的概念。 首先,也是最重要的,命名空间提供了一种组织 Kubernetes 对象的方式,可以防止同名问题,即集群中的任何 Kind 的实例对象命名必须唯一的问题。对于不同的 Kind 对象命名是可以相同的,但是同一种对象在同一命名空间下是不允许重现重名。对于 Kubernetes 用户,这也有利于用户使用简短的命名,如 frontend 或 database, 而不必担心在集群中产生命名冲突。 其次,重要也很巧妙的设计是,在控制面中命名空间是安全隔离的主要单元和身份标示。他们具有排他性,也就是说,命名空间中的对象属于且仅属于一个命名空间。如上所述,它将对象进行分组。这些分组的独立性使他们可以自然的关联一组相关的对象。 例如,命名空间被作为各种策略的默认目标,如 RoleBinding, Network Policies, 这也适用于 Kubernetes 扩展,如 Istio Polices。 当然,在命名空间内应用策略也是可行的,但是 Kubernetes 对他的支持有限,且容易引起错误,同时在 Kuberenets 生态系统中容易使用户产生困惑。例如,RBAC 策略可以应用于目标对象的名称,但是这些策略很难以维护。 再如,命名空间中的 Pod 可以使用同空间下的任何 Service Account 运行, 甚至是远超过 Pod 运行所需的特权。管理员在不借助 Validting Admission Contoller 或 OPA Gatekeeper 等高级技术情况下,通常无法直接限制。结果是,作用于 Service Account 的各种策略是弱策略,除非这些 Service Account 来自不同的命名空间。
使用 apt 命令获取 Ubuntu 安装包源码
由于最近需要研究一个关于 Ubuntu 上 systemd 的问题,因此需要下载 systemd 的源代码。 一般源码下载可以在官网或者Github中下载,如 systemd。但是由于 linux 各个分发版本可能会给它们打上自己的补丁,因此我们需要从 Ubuntu 下载其源码包。在 Debian 或 Ubuntu 的系统中源码是文件版的软件发行包,因此我们可以使用 apt-get 或者 apt 命令下载其源码 (DEB 文件包)。
Kubernetes - 'No Podsandbox Found with Id' 导致 Kubelet 启动失败分析过程总结
某线上客户反应 Kubernetes 集群中一节点显示为 “NotReady” 状态,重启 Kubelet 后任然无法恢复。由于无法连接环境,只能拿到少量相关日志信息,因此尝试本地重现。
Kubernetes RBAC - 证书认证
X509 客户证书 一般 Kubernetes 集群都会启用基于客户证书的用户认证模式。 API Server 通过 --client-ca-file=SOMEFILE 选项配置 CA 证书用于客户证书认证。如果提供的证书被验证通过,则 subject 中的公共名称(Common Name)就被作为请求的用户名。 通常可以使用两种方式签发: 通过 CertificateSigningRequest 资源类型允许客户申请签名 X.509 证书 使用外部证书服务颁发证书,如 openssl 通过 CSR API 签发证书步骤: 生成用户私钥: openssl genrsa -out user2.key 2048 使用私钥生成证书签名请求 CSR: openssl req -new -key user2.key -out user2.csr -subj "/CN=user2/O=group1/O=group2" 如果遇到错误信息 Can't load /home/ubuntu/.rnd into RNG 需先执行:
CKA 实战 第二章 安装与升级
Kubernetes 有多种部署方式,学习环境可以选用 Minikube 或 Kind 等。但在 CKA 认证考试中会考察基于 Kubeadm 的部署方式, 操作系统为 Ubuntu。你可以使用云主机或者VirlualBox虚拟机环境安装 Ubuntu。这里我们推荐在线教学环境 KataKoda。 Kadakda 的课程中提供了交互式教学环境,我们既可以参考其实验步骤,也可独立使用其在线环境。 什么是 Kubeadm? Kubeadm 是 Kubernetes 集群快速安装部署工具,它解决了 Kubernetes 核心组件安装,TLS 加密配置,证书管理等问题,提供了开箱即用的安全特性。 Kubeadm 常用命令 kubeadm init 用于初始化 Kubernetes 控制面 kubeadm join 将工作节点加入集群或者添加其他控制面节点 kubeadm upgrade 用户升级 Kubernetes 集群 kubeadm reset 重置当前主机,恢复 kubeadm init 或 kubeadm join 的配置。 Kubernetes 组件 Kubernetes 集群由控制面与集群节点两部分组成, 节点上运行应用的工作负载 Pod,控制面负责集群中的工作节点与 Pod 的管理。