kubectl --> 認證 --->授權 -->准入控制
認證:證書 身份識別
授權:rbac 權限檢查
准入控制: 補充授權機制 多個插件實現 只在創建 刪除 修改 或做代理操作時做補充
用戶賬號:
user
客戶端 -->API server -->
user:username,uid
group:
extra:
API
Request path 訪問資源請求
http://192.168.81.10:6443/apis/apps/v1/namespaces/default/deployments/myapp-deploy
kubectl api-versions
kubectl證書
cat .kube/config 本地有證書,可直接連接apiserver 授信了
kubectl proxy --port=8080 在其他服務器上開啟apiserver監聽 通過此監聽與apiserver建立連接
curl http://localhost:8080/api/v1/namespaces 請求是通過url發給apiserver的,響應的是一個json結果
kubectl get deploy -n kube-system
curl http://localhost:8080/apis/apps/v1/namespaces/kube-system/deployments
curl http://localhost:8080/apis/apps/v1/namespaces/kube-system/deployments/coredns
所有的資源控制都是通過api請求實現的
/apis 是總的接口
kubectl get deploy
curl http://localhost:8080/apis/apps/v1/namespaces/default/deployments/myapp-deploy
Http request verb:請求動作 curl -s
get posts put delete
API requests verb 即kubectl命令
get list create update patch watch proxy delete deletecollection
Rescource:
Subresource Namespace Api group
kubectl get statefulset
curl http://localhost:8080/apis/apps/v1/namespaces/default/statefulsets
curl http://localhost:8080/apis/apps/v1/namespaces/default/statefulsets/myapp
有哪些客戶端需要與apiserver聯系
集群外的客戶端 通過apiserver監聽的節點地址kubectl proxy --port=8080
集群中的pods 通過 kubectl get svc, kubectl describe svc kubernetes,即通過10.96.0.1 kubernetes連接的 通過service引入到集群內部來
pods --> service kubernetes 10.96.0.1 --> 192.168.81.10:6443 apiserver 從而pod可以直接請求apiserver服務了
apiserver還要做認證: apiserver把自己的證書傳給客戶端 --> 客戶端校驗apiserver身份 --> apiserver校驗客戶端身份(pod地址為10.96.0.1)
pod賬戶認證 serviceaccount sa 服務賬號
kubectl explain pods.spec.serviceAccountName
解釋:
kubectl describe pods myapp-deploy-55b78d8548-t4xxx
Volumes:
default-token-dkt94:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-dkt94
sercretName即是pod的賬號或認證信息 以volumes的default-token-dkt94掛載到pods之上
serviceAccount也是標准的k8s資源 通過serviceAccountName加載到pods上
如何創建serviceaccount
kubectl create serviceaccount -h
例如:
kubectl create serviceaccount mysa --dry-run
創建serviceaccount賬號 賬號名 --dry-run:沒有真正創建 生成框架
kubectl get sa
kubectl create serviceaccount admin
kubectl get sa 在查詢就已經創建了 系統會自動為admin生成secret信息
kubectl describe sa admin 查詢admin 的secret
kubectl get secrets 確認secret
kubectl describe secrets admin-token-5kqwt 這個serviceaccount只限於連接apiserver登陸認證,但干不了別的事情,需要授權
使用自定義sa
cp pod-demo.yaml pod-sa-demo.yaml
vim pod-sa-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-sa-demo
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
serviceAccount: admin 定義pod使用自定義的sa賬號 不定義就會自動使用default-token-dkt94
驗證
kubectl apply -f pod-sa-demo.yaml
kubectl describe pods pod-sa-demo
Volumes:
admin-token-5kqwt:
Type: Secret (a volume populated by a Secret)
SecretName: admin-token-5kqwt
獲取資源模板
kubectl create serviceaccount mysa --dry-run -o yaml > xxxx.yaml 可獲取yaml資源模板
kubectl get pods myapp-1 -o yaml --export > xxxx.yaml 獲取資源清單
secret
docker-registry docker到docker私有服務認證
generics 其他通用generics
tls 給pod提供證書
與鏡像倉庫registery認證imagePullSecrets 認證的 secret為docker-registry,也可以使用sa來登陸registry驗證,sa定義在pods上
只需要在定義pod資源清單時加上Image pull secret項
kubectl explain pods.spec.imagePullSecrets
kubectl create secret --help
kubectl describe sa admin
Image pull secrets: <none>
人類賬號認證 useraccount
Rbac授權
kubectl config –help 管理kubectl配置文件的
kubeconfig
kubectl config view 查看有多少集群
證書存放: /etc/kubernetes/pki/
創建賬號:
先創建私鑰
(umask 077; openssl genrsa -out mageedu.key 2048)
子shell 加密方式 輸出key私鑰 私鑰大小
結果:mageedu.key
基於私鑰去創建證書,由ca.crt簽署
先生成證書簽署請求
openssl req -new -key mageedu.key -out mageedu.csr -subj "/CN=mageedu"
證書簽署請求 指定名稱:用戶賬號
結果: mageedu.csr
簽證:用ca.crt去簽
openssl x509 -req -in mageedu.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out mageedu.crt -days 365
-in 指定簽署請求文件 –CA指定ca簽 -CAcreateserial 指定CA自己來簽
-out 保存為證書文件 -days保存多久
結果: mageedu.crt
查看證書內容
openssl x509 -in mageedu.crt -text -noout
文本輸出
把用戶賬號信息添加到去認證為連入k8s集群的信息
kubectl config set-credentials –help
設置認證
kubectl config set-credentials mageedu --client-certificate=./mageedu.crt --client-key=./mageedu.key --embed-certs=true
mageedu 認證進入集群的認證名,與用戶帳號要一樣
--client-certificate 指定crt證書
--client-key 指定私鑰
--embed-certs 是否隱藏證書
kubectl config view 查看已經創建集群管理員賬號
設置上下文contexts,讓mageedu,也能去訪問集群
kubectl config set-context mageedu@kubernetes --cluster=kubernetes --user=mageedu
上下文名稱 指定的集群 指定的登錄用戶名
- context:
cluster: kubernetes 集群名
user: mageedu 登錄名
name: clusteradmin@kubernetes 上下文名
切換賬號 等於切換context
kubectl config use-context clusteradmin@kubernetes
測試訪問
Kubectl get pods
設置集群
kubectl config set-cluster –help
kubectl config --help
kubectl config set-cluster mycluster --kubeconfig=/tmp/test.conf --server="https://192.168.85.110:6443"
集群名 指定配置文件 指定server
--certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true
指定CA證書 是否隱藏CA
驗證查看創建的集群cluster
kubectl config view --kubeconfig=/tmp/test.conf