需求
我们需要一台单独的机器访问kubernetes资源,这样的好处就是避免直接通过 root身份登录kubernetes的master节点访问,提高了安全性,同时可以避免直接操作而带来的风险。
客户机访问如下:
要求:
- 客户机访问任意的master节点就可以操作k8s集群
- 客户机的登录账号不能是root
- 客户机只有查看k8s资源的权限,不能修改,删除资源,即list,watch,get
- 客户机可以查看任意namespace
环境准备
环境准备如下。客户机centos7操作系统,helm3
配置客户机
创建用户user
指定用户user, 用户组user,家目录/home/user/
#客户机上root权限下执行
groupadd user #增加user用户组
useradd -d /home/user/ user -g user #增加user用户,用户组为user,家目录为/home/user/
passwd user #设定user的密码
gpasswd -a user wheel #增加user用户的sudo权限
id user #查看登录用户信息
#配置user用户可以ssh登录
echo "AllowUsers user" >> /etc/ssh/sshd_config
systemctl restart sshd
配置kubeconfig
需要在k8s集群中,配置一个用户user,生成kubeconfig文件。
生成kubeconfig
#master节点上执行
mkdir ~/kubeconfig_user && cd ~/kubeconfig_user
openssl genrsa -out user.key 2048 #新生成密钥
openssl req -new -key user.key -out user.csr -subj "/CN=user" #配置csr文件,CN的名字最好和user一致
openssl x509 -req -days 3650 -in user.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out user.crt #签发证书,有效期一年
#以下是生成kubeconfig
#cluster.local是集群名字,通过可kubectl config view查看
#server 是任意一个master节点地址
kubectl config set-cluster cluster.local --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true \
--server=https://192.168.85.4:6443 --kubeconfig=config-user
kubectl config set-credentials user --client-certificate=user.crt --client-key=user.key --embed-certs=true --kubeconfig=config-user
kubectl config set-context default --cluster=cluster.local --user=user --kubeconfig=config-user
kubectl config use-context default --kubeconfig=config-user
chmod 644 config-user
配置user用户的rbac信息
以下为rbac文件
#vim user-rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: user
rules:
- apiGroups:
- '*'
resources: #设定的资源
- '*'
verbs: #设定的权限
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: user
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: user
配置完成后,应用资源,检查rbac
测试
配置kubectl
客户机上配置
#配置kubectl的yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#安装kubectl
yum install -y kubectl
#验证安装
kubeclt version
在master节点上,查看之前生成的kubeconfig文件
cat config-user
使用客户机,登录user账户家目录
#使用user身份编辑
mkdir ~/.kube
vi ~/.kube/config
将前面生成的kubeconfig文件复制进去保存
使用user身份登录客户机进去后,查看配置信息
kubectl config view
尝试删除pod,失败,确认权限配置生效