运维训练营第 15 周作业
作业:
添加静态令牌认证的用户
create certs
生成 3 位和 8 位的随机数,用点分隔开。
k8s@k8s-master01:~$ echo "$(openssl rand -hex 3).$(openssl rand -hex 8)"
93fcad.e8e0971f9e15d2cb
k8s@k8s-master01:~$ echo "$(openssl rand -hex 3).$(openssl rand -hex 8)"
b2f63d.db45e0ab0019ddbe
k8s@k8s-master01:~$ echo "$(openssl rand -hex 3).$(openssl rand -hex 8)"
ce6c62.fc88f5372d10817f
generate authfiles
mkdir -p /etc/kubernetes/authfiles
vi /etc/kubernetes/authfiles/tokens.csv
93fcad.e8e0971f9e15d2cb,tom,1001,"kubeusers,kubeadmin"
b2f63d.db45e0ab0019ddbe,jerry,1002,"kubeusers"
ce6c62.fc88f5372d10817f,trump,1003,"kubeusers,kubeadmin"
change kube-apiserver
vi /etc/kubernetes/manifests/kube-apiserver.yaml
volumes.hostPath.path: /etc/kubernetes/authfiles/tokens.csv
volumes.hostPath.type: FileOrCreate
Or(preferred):
volumes.hostPath.path: /etc/kubernetes/authfiles
volumes.hostPath.type: DirectoryOrCreate
volumes.hostPath.name: auth-files
volumeMounts:
- mountPath: /etc/kubernetes/authfiles
name: authfiles
readOnly: true
spec.containers.command: --token-auth-file=/etc/kubernetes/authfiles/tokens.csv
update yaml for apiserver
cp kube-apiserver.yaml kube-apiserver.yaml_bak
cp /tmp/kube-apiserver.yaml /etc/kubernetes/manifests
alias k='kubectl'
export KUBECONFIG=/etc/kubernetes/admin.conf
k8s 会自动扫描那个目录的改动,在 API server 重启后,就可以看到系统的 pod 了。
添加 509 证书用户
1、生成长度为 4096 的私钥: (umask 077; openssl genrsa -out ./pki/mason.key 4096)。
2、创建证书签署请求 csr: openssl req -new -key ./pki/mason.key -out ./pki/mason.csr -subj "/CN=mason/O=developers"
3、由 Kubernetes CA 签署证书 crt: openssl x509 -req -days 365 -CA ./pki/ca.crt -CAkey ./pki/ca.key -CAcreateserial -in ./pki/mason.csr -out ./pki/mason.crt
4、将 pki 目录下的 mason.crt、mason.key 和 ca.crt 复制到某部署了 kubectl 的主机上,即可进行测试。
(1)这里以 k8s-node01 为示例;只需要复制 mason.crt 和 mason.key 即可,因为集群工作节点上已经有 cr.crt 文件。
(2)命令:scp -rp /etc/kubernetes/pki/{mason.crt,mason.key} k8s-node01:/etc/kubernetes/pki/
ca.crt 已经有了,所以不需要复制了。
其实就是 RSA 的 key。
用资源配置文件创建 serviceAccount
可以通过 k create sa mysa --dry-run=client -o yaml -n default 命令获得配置文件。
sa.yaml 配置文件如下:
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: null
name: mysa
namespace: default
创建的命令如下:
k apply -f sa.yaml
为用户授予权限
分为 cluster/user/context 几种:
首先建立 cluster,不同的 user 都用同一个 cluster,名称是 kube-test。
cluster
kubectl config set-cluster kube-test --embed-certs=true --certificate-authority=/etc/kubernetes/pki/ca.crt --server="https://kubeapi.magedu.com:6443" --kubeconfig=$HOME/.kube/kubeusers.conf
user(集群级别的)
Tom 有 blog 的名称空间权限
kubectl config set-credentials tom --token="93fcad.e8e0971f9e15d2cb" --kubeconfig=$HOME/.kube/kubeusers.conf
Jerry 有管理集群权限
kubectl config set-credentials tom --token="93fcad.e8e0971f9e15d2cb" --kubeconfig=$HOME/.kube/kubeusers.conf
Mason 有读取集群权限
k config set-credentials mason --embed-certs=true --client-certificate=/etc/kubernetes/pki/mason.crt --client-key=/etc/kubernetes/pki/mason.key --kubeconfig=$HOME/.kube/kubeusers.conf
可以看到当前的 pod 情况
k get po --kubeconfig=kubeusers.conf
context
kubectl config set-context tom@kube-test --cluster=kube-test --user=tom --kubeconfig=$HOME/.kube/kubeusers.conf
kubectl config use-context jerry@kube-test --kubeconfig=$HOME/.kube/kubeusers.conf
kubectl config use-context mason@kube-test --kubeconfig=$HOME/.kube/kubeusers.conf
加上 ca.crt 之后,就有权限访问 pod 的内容了。
部署 jenkins,prometheus 集群
jenkins 暂时无法 ready,还在 pending,待续。
helm 部署 wordpress,harbor,redis 集群
helm 的 pod 还在 pending,待续。
评论