k8s之serviceaccount,登錄賬號創建


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM