Rockylinux8 安装Cobbler3
安装部署Cobbler3 依赖
安装epel-release
1 | dnf install epel-release |
开启 cobbler 源
1 | dnf config-manager --set-enabled epel-modular |
安装cobbler
1 | dnf install cobbler grub2-efi-x64.x86_64 grub2-pc.x86_64 \ |
配置cobbler
配置依赖组件
1 | cp -f /usr/share/syslinux/{ldlinux.c32,libcom32.c32,libutil.c32,menu.c32,pxelinux.0} /var/lib/cobbler/loaders |
配置cobbler
1 | sed -i "s/127.0.0.1/192.168.2.49/g" /etc/cobbler/settings.yaml |
settings.yaml 配置后结果
1 | default_password_crypted # default_password_crypted #执行 openssl passwd -1 <密码> 生成加密字符串,替换默认密码 |
配置dnsmasq 使用上级路由dhcp
1 | /etc/dnsmasq.d/dhcp |
启动cobbler及相关程序
1 | # 开启开机启动并启动 |
导入镜像到cobbler
1 | # 导入CentOS-7-x86_64-DVD-2207-02.iso |
kubernetes添加私有仓库
1、为docker私有仓库导入账户密码信息:
1 | kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL |
转换标准输出:
1 | kubectl get secret myregistrykey --output="jsonpath={.data.\.dockerconfigjson}" | base64 -d |
2、查看信息是否生成:
1 | kubectl get secrets myregistrykey |
3、为访问kubernetes.api创建一个用户
编辑一个yaml格式文件:
1 | apiVersion: v1 |
通过 kubectl create -f file.yaml 生成 用户 build-robot
通过 kubectl get serviceaccount build-robot -o yaml 查看用户信息
可以顺便创建一个API令牌:
1 | apiVersion: v1 |
token可通过 kubectl get secret build-robot-secret -o yaml 获取(或通过describe命令获取)
4、接下来我们将之前的”myregistrykey” 加入build-robot用户,让之后在使用此账户时,可pull私有仓库的加密资源
(1)
1 | kubectl get serviceaccounts build-robot -o yaml > ./ro.yaml |
(2 )
1 | kubectl get serviceaccounts default -o yaml > ./sa.yaml |
这样在生成pod的yaml文件的编辑中,可使用如下账户在default空间下时,会自动调用myregistrykey
1 | serviceAccount: build-robot |
或者在pod的yaml文件中,spec.imagepullsecrets下,添加- name: myregistrykey来忽略账户自带的key,直接pull自己私有仓库的项目:
1 | apiVersion: v1 |
配置 default 账号 自动拉取 镜像
1、为docker私有仓库导入账户密码信息:
1 | kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL |
转换标准输出:
1 | kubectl get secret myregistrykey --output="jsonpath={.data.\.dockerconfigjson}" | base64 -d |
2、查看信息是否生成:
1 | kubectl get secrets myregistrykey |
可以顺便创建一个API令牌:
1 | apiVersion: v1 |
这样在生成pod的yaml文件的编辑中,可使用如下账户在default空间下时,会自动调用myregistrykey
1 | serviceAccount: default |
或者在pod的yaml文件中,spec.imagepullsecrets下,添加- name: myregistrykey来忽略账户自带的key,直接pull自己私有仓库的项目:
1 | apiVersion: v1 |
K8S 证书轮换
For kubeadm provisioned clusters
1 | kubeadm alpha certs check-expiration |
For all clusters
1 | openssl x509 -noout -dates -in /etc/kubernetes/pki/apiserver.crt |
更新过期时间
方法1: 使用 kubeadm 升级集群自动轮换证书
1 | kubeadm upgrade apply --certificate-renewal v1.15.0 |
方法2: 使用 kubeadm 手动生成并替换证书
1 | # Step 1): Backup old certs and kubeconfigs |
方法3: 非 kubeadm 集群
非 kubeadm 集群请参考 配置 CA 并创建 TLS 证书 重新生成证书,并重启各个 Kubernetes 服务。
kubelet 证书自动轮换
Kubelet 从 v1.8.0 开始支持证书轮换,当证书过期时,可以自动生成新的密钥,并从 Kubernetes API 申请新的证书。
证书轮换的开启方法如下:
1 |
|
撤销证书:
Kubernetes 目前还不支持通过 Certificate Rovocation List (CRL) 来撤销证书。所以,目前撤销证书的唯一方法就是使用新的 CA 重新生成所有证书,然后再重启所有服务。
kubeadm 部署的 k8s 增加 ip 并重新生成证书
原因是客户环境为双网卡环境,对内和对外有两个不同的网段,因为前期的部署 [那肯定不是我部署的,是我部署,我也不一定注意的到],因为本机路由不对,没有走对外的网卡,而加入控制节点的时候,没有指定 ip,导致走的默认路由,后期发现了问题,现在需要重新生成证书来修复 etcd 和 apiserver 因为修改 ip 而引发的一系列问题
正片开始
证书的修改,必须要 apiserver 服务可用
备份 kubernetes 目录
cp -r /etc/kubernetes{,-bak}
查看证书内的 ip
for i in $(find /etc/kubernetes/pki -type f -name "*.crt");do echo ${i} && openssl x509 -in ${i} -text | grep 'DNS:';done
可以看到,只有 apiserver 和 etcd 的证书里面是包含了 ip 的
1 | /etc/kubernetes/pki/ca.crt |
生成集群配置
1 | kubeadm config view > /root/kubeadm.yaml |
增加 ip
1 | vim kubeadm.yaml |
删除原有的证书
需要保留 ca ,sa,front-proxy 这三个证书
1 | rm -rf /etc/kubernetes/pki/{apiserver*,front-proxy-client*} |
重新生成证书kubeadm init phase certs all --config /root/kubeadm.yaml
再次查看证书内的 ip
for i in $(find /etc/kubernetes/pki -type f -name "*.crt");do echo ${i} && openssl x509 -in ${i} -text | grep 'DNS:';done
这里可以得到验证,不会覆盖之前证书内已经有的 ip,会将新的 ip 追加到后面
1 | /etc/kubernetes/pki/etcd/ca.crt |
将配置更新到 configmap 中
这样,以后有升级,或者增加其他 ip 时,也会将配置的 CertSANs 的 ip 保留下来,方便以后删减
kubeadm init phase upload-config kubeadm --config kubeadm.yaml