
kubernetes1.5.2集群部署过程--安全模式
生成 CA 证书通过
发布日期:2025-04-03 04:02:26
浏览次数:8
分类:精选文章
本文共 3892 字,大约阅读时间需要 12 分钟。
Kubernetes 安全版集群部署指南
在 Kubernetes 生产环境中安全可靠地部署集群至关重要。本文将详细介绍如何在 CentOS 7 �arestates 系统上安全地部署带有SSL 保证的 Kubernetes 集群。我们将利用 cfssl 工具进行内置 CA 证书管理,确保所有组件间通信安全,有效防止非授权访问。
环境配置
宿主机配置
CentOS 7.3.1611,Selinux 关闭,Etcd 3.1.9,Flannel 0.7.1,Docker 1.12.6,Kubernetes 1.5.2。网络设备
提供内部网络 192.168.20.0/24,使用 Flannel 进行网络管理。(详细网络配置可参考下文)
软件安装
通过 Yum 安装以下软件包:
yum install etcd kubernetes kubernetes-client kubernetes-master kubernetes-node flannel docker docker-devel docker-client docker-common -y
证书部署
我们将使用 cfssl 工具进行证书管理。以下是主要步骤:
cfssl 安装
下载并安装 cfssl 工具:
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64chmod a+x cfssl* mv cfssl-certinfo_linux-amd64 cfssl-certinfomv cfssl_linux-amd64 cfsslmv cfssljson_linux-amd64 cfssljson
CA 证书签发与配置
ca-config.json
定义 CA 签名配置:{ "signing": { "default": { "expiry": "87600h" // 证书有效期为 30 天 } }, "profiles": { "kubernetes": { "usages": [ "signing", "key encipherment", "server auth", "client auth" ], "expiry": "87600h" } }}
使用以下命令签发 CA 证书:
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
");
2. **签发 Kubernetes 组件证书** - **kube-master 证书**: 定义服务相关 IP 或域名,并签发证书。 ```bash cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-master-csr.json | cfssljson -bare kube-master ```- **kubelet 证书**: 定义节点相关 IP 或域名,签发 kubelet 证书。 ```bash cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubelet-csr.json | cfssljson -bare kubelet ```- **Etcd 命名证书**: 标记 Etcd 成员证书,用于集群通信。 ```bash cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes etcd-member-csr.json | cfssljson -bare etcd-member ```### 证书校验使用 `cfssl-certinfo` 工具验证证书内容,确保所有证书字段正确无误。### 证书分发将生成的证书分发到相应服务器:- Etcd 证书:拷贝到 `/etc/ssl/etcd` 目录,权限设置为 `etcd:etcd`。- Kubernetes 组件证书:拷贝到 `/etc/ssl/kube` 目录,权限设置为 `kube:kube`。- Etcd 客户端证书:拷贝到所有节点客户端,确保通信顺畅。---## Kubernetes 集群配置### Etcd 部署配置 Etcd 服务文件: ```bash# etcd.conf [member]ETCD_NAME=kube-masterETCD_DATA_DIR="/var/lib/etcd/default.etcd"ETCD_LISTEN_CLIENT_URLS="https://192.168.20.128:2379, http://localhost:2379, http://localhost:4001"[cluster]ETCD_ADVERTISE_CLIENT_URLS="https://192.168.20.128:2379"[security]ETCD_CERT_FILE="/etc/ssl/etcd/etcd-client.pem"ETCD_KEY_FILE="/etc/ssl/etcd/etcd-client-key.pem"ETCD_CLIENT_CERT_AUTH="true"ETCD_TRUSTED_CA_FILE="/etc/ssl/etcd/ca.pem"
启动 Etcd 服务:
service etcd start
Flannel 部署
配置 Flannel 网络:
将以下内容写入/etc/sysconfig/flanneld
: FLANNEL_ETCD_ENDPOINTS="https://192.168.20.128:2379 --etcd-cafile=/etc/ssl/kube/ca.pem --etcd-certfile=/etc/ssl/kube/etcd-client.pem --etcd-keyfile=/etc/ssl/kube/etcd-client-key.pem"FLANNEL_ETCD_PREFIX="/k8s.io"
启动 Flannel 服务:
systemctl start flanneld
创建 Flannel 网络:
etcdctl --ca-file=/etc/ssl/etcd/ca.pem --cert-file=/etc/ssl/etcd/etcd-client.pem --key-file=/etc/ssl/etcd/etcd-client-key.pem mk /k8s.io/metadata/config '{"network": "192.168.0.0/16"}'
Kubernetes 组件部署
Controller Manager 配置
- 配置文件路径:
/etc/kubernetes/controller-manager
示例配置文件:KUBE_CONTROLLER_MANAGER_ARGS="--service-account-private-key-file=/etc/ssl/kube/kube-master-key.pem --root-ca-file=/etc/ssl/kube/ca.pem --master=http://localhost:8080"
API Server 配置
- 配置文件路径:
/etc/kubernetes/apiserver
示例配置文件:--insecure-bind-address=127.0.0.1--basic-auth-file=/etc/kubernetes/useraccount.csv--etcd-servers=https://192.168.20.128:2379--etcd-cafile=/etc/ssl/kube/ca.pem--etcd-certfile=/etc/ssl/kube/etcd-client.pem--etcd-keyfile=/etc/ssl/kube/etcd-client-key.pem
启动 API Server:
systemctl restart kube-apiserver
Nodes 配置
- 配置文件路径:
/etc/kubernetes/kubelet
示例配置文件:KUBELET_ADDRESS=0.0.0.0KUBELET_PORT=10250KUBELET_HOSTNAME=kube-node-01
启动 kubelet 服务:
systemctl restart kubelet
##سلام،欢迎访问我的个人博客 就.gsubstack.com. 如果您有任何问题或需要进一步帮助,请随时联系我!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月15日 05时52分18秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
pair的用法
2021-05-12
javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
2021-05-14
echarts 基本图表开发小结
2021-05-14
TreeSet、TreeMap
2021-05-14
JVM内存模型
2021-05-14
GitHub上传时,项目在已有文档时直接push出现错误解决方案
2021-05-14
嵌入式系统试题库(CSU)
2021-05-15
00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
2021-05-15
00013.05 字符串比较
2021-05-15
UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
2021-05-16
Android 架构组件 – 让天下没有难做的 App
2021-05-16
能解决数据可视化大屏需求的3款可视化工具
2021-05-16
第01问:MySQL 一次 insert 刷几次盘?
2021-05-16
laravel server error 服务器内部错误
2021-05-18
一道简单的访问越界、栈溢出pwn解题记录
2021-05-18
响应的HTTP协议格式+常见的响应码
2021-05-18
springboot redis key乱码
2021-05-19