共计 2542 个字符,预计需要花费 7 分钟才能阅读完成。
Kubernetes API 的其它服务。Service Account 它并不是给 kubernetes 集群的用户使用的,而是给 pod 里面的进程使用的,它为 pod 提供必要的身份认证。
Kubernetes 提供了 Secret 来处理敏感信息,目前 Secret 的类型有 3 种:
Opaque(default): 任意字符串
kubernetes.io/service-account-token: 作用于 ServiceAccount
kubernetes.io/dockercfg: 作用于 Docker registry,用户下载 docker 镜像认证使用。
本文将介绍在 kubernetes 集群中配置 serviceaccount 和 secret,可以让 kubernetes 使用私有仓库,并支持 nginx basic 认证。由于我们采用的是 rpm 包方式安装的 kubernetes 集群,默认没有 ca.crt、kubecfg.crt kubecfg.key、server.cert、server.key 这些文件,需要下载源码生成。
一、使用工具生成 key 文件
# mkdir git
# cd git/
# git clone https://github.com/kubernetes/kubernetes
科学上网方式下载 easy-rsa.tar.gz,下载地址在 make-ca-cert.sh 脚本中可以找到,将文件放到~/kube 目录下
# ls ~/kube
easy-rsa.tar.gz
# cd /root/git/kubernetes/
# sh cluster/CentOS/make-ca-cert.sh 192.168.115.5
# ls /srv/kubernetes/
ca.crt kubecfg.crt kubecfg.key server.cert server.key
# chown -R kube:kube /srv/kubernetes/*
将这些文件发送到 vm2 主机的相同目录
# chown -R kube:kube /srv/kubernetes/*
# scp -rp /srv/ root@vm2:/
二、修改配置文件
# grep -v ‘^#’ /etc/kubernetes/apiserver |grep -v ‘^$’
KUBE_API_ADDRESS=”–insecure-bind-address=192.168.115.5″
KUBE_ETCD_SERVERS=”–etcd-servers=http://192.168.115.5:2379″
KUBE_SERVICE_ADDRESSES=”–service-cluster-ip-range=10.254.0.0/16″
KUBE_ADMISSION_CONTROL=”–admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ServiceAccount,SecurityContextDeny,ResourceQuota”
KUBE_API_ARGS=”–storage-backend=etcd2 –secure-port=6443 –client-ca-file=/srv/kubernetes/ca.crt –tls-cert-file=/srv/kubernetes/server.cert –tls-private-key-file=/srv/kubernetes/server.key”# grep -v ‘^#’ /etc/kubernetes/controller-manager |grep -v ‘^$’
KUBE_CONTROLLER_MANAGER_ARGS=”–root-ca-file=/srv/kubernetes/ca.crt –service-account-private-key-file=/srv/kubernetes/server.key”
三、重启相关服务
Master:
# systemctl restart kube-apiserver
# systemctl restart kube-controller-manager
# systemctl restart kube-scheduler
Slave:
# systemctl restart kubelet
# systemctl restart kube-proxy
# kubectl get secret
# kubectl describe secret default-token-6pddn
四、通过配置 secret,让 kubernetes 可以从私有仓库中拉取镜像
# kubectl create secret docker-registry regsecret \
–docker-server=registry.fjhb.cn \
–docker-username=ylw \
–docker-password=123 \
–docker-email=ylw@fjhb.cn
在 yaml 文件 sepc 节加入 imagePullSecrets,指定使用创建好的 secret
# kubectl create -f frontend-controller.yaml
通过参考 kubernetes 的官方文档,并不能解决实际问题
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
nginx 日志依然报 401 认证错误
我们知道使用 docker pull 去私有仓库拉取镜像,需要先使用 docker login 登陆一下私有仓库,而 login 执行的操作,实际上就是在用户的家目录写入了.docker/config.json 文件。将此文件做一个软链接到 /var/lib/kubelet/.docker/ 就可以解决此问题了。当配置了软连接后就不需要在 yaml 文件中引用前面的创建的 secret 了。
# cat /root/.docker/config.json
# ln -s /root/.docker/ /var/lib/kubelet/.docker/
# kubectl create -f frontend-controller.yaml