<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      K8S的用戶管理

      1 K8S賬戶體系介紹

      在k8s中,有兩類用戶,service accountuser,我們可以通過創建roleclusterrole,再將賬戶和role或clusterrole進行綁定來給賬號賦予權限,實現權限控制,兩類賬戶的作用如下。

      • server account:k8s的進程、pod申請授權時使用的賬戶。類似于nginx服務會有一個nginx用戶。
      • user:k8s的管理人員使用的賬戶,也就是我們使用的賬戶。

      2 service account

      2.1 介紹

      Kubernetes中所有的訪問,無論外部內部,都會通過API Server處理,訪問Kubernetes資源前需要經過認證與授權。

      • 在k8s中,service account(簡稱sa)是給集群中的進程使用的,當集群中的pod或進程需要跟apiserver申請調用資源時會使用到sa。

      2.2 為什么需要sa

      主要是為了權限控制,不同的sa賬戶對應不同的權限,如增刪查等。

      2.3 如何創建sa

      • 創建一個sa
      [root@k8s-master01 ~]# kubectl create serviceaccount sa-example ##創建一個sa名為sa-example
      serviceaccount/sa-example created
      [root@k8s-master01 ~]#
      [root@k8s-master01 ~]# kubectl describe sa sa-example
      Name:                sa-example
      Namespace:           default
      Labels:              <none>
      Annotations:         <none>
      Image pull secrets:  <none>
      Mountable secrets:   <none>
      Tokens:              <none>
      Events:              <none>
      • 給sa創建secret,v1.25版本后創建sa后不再自動創建secret,因此需要手動創建。secret中會包含一些認證信息,包括ca證書等。
      [root@k8s-master01 ~]# cat sa-example-secret.yaml
      apiVersion: v1
      kind: Secret
      metadata:
        name: secret-sa-example
        annotations:
          kubernetes.io/service-account.name: "sa-example"   # 這里填寫serviceAccountName
      type: kubernetes.io/service-account-token
      [root@k8s-master01 ~]# kubectl create -f sa-example-secret.yaml
      secret/secret-sa-example created
      [root@k8s-master01 ~]# kubectl describe sa sa-example ##檢查可以發現sa的token處已經關聯上了剛創建的secret
      Name:                sa-example
      Namespace:           default
      Labels:              <none>
      Annotations:         <none>
      Image pull secrets:  <none>
      Mountable secrets:   <none>
      Tokens:              secret-sa-example
      Events:              <none>
      [root@k8s-master01 ~]# kubectl describe secret secret-sa-example  ##查看secret的詳情
      Name:         secret-sa-example
      Namespace:    default
      Labels:       <none>
      Annotations:  kubernetes.io/service-account.name: sa-example
                    kubernetes.io/service-account.uid: a4b9c0ea-2362-4bb3-abc7-10dc0fb795fc
      
      Type:  kubernetes.io/service-account-token
      
      Data
      ====
      ca.crt:     1099 bytes
      namespace:  7 bytes
      token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IkhwYldkODNuZmNMczYzNlRiRmpQQndMTFJYSWZZODZQSFIxUFI0WW1fYWMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InNlY3JldC1zYS1leGFtcGxlIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6InNhLWV4YW1wbGUiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhNGI5YzBlYS0yMzYyLTRiYjMtYWJjNy0xMGRjMGZiNzk1ZmMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpzYS1leGFtcGxlIn0.OjGSORdrRchb-dOk56bIx9s2KfedIrcBHhWi4N7g1v2zDgbumF8DoIVUbDdSB3IXtSnrWu6ccF-NEXDkxTtsU3rRZCn4qLpYqxtmK-We0-JDqfPd6brSqv8SMOFpUhbTxOcCjsICLvGY0dE8iTNjRLjmlTlNENGJui3pYweLCV1Qe0Ry4hZs0BFaMVZn6dSjjNnPTTfaSNRk-4jcqqoOxC0qxVrpQb-LjLvBy9fi2omBZQnb4e98aGo8SN4U5tWNOr_QEfYO9h8B9w-Ub5eI2uZ9jan07ezjD9wathT4BP471m-8NFsFDO8PcRpvxDtNjl4XzMoQmjZA1wM0rseDrg

      24.4 如何使用sa

      Pod中使用ServiceAccount非常方便,只需要指定ServiceAccount的名稱即可。

      [root@k8s-master01 ~]# cat nginx-alpine.yaml
      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx-test-pod  ##pod名
      spec:
        serviceAccountName: sa-example  ##sa名
        containers:
        - image: nginx:alpine
          name: container-0
          resources:
            limits:
              cpu: 100m
              memory: 200Mi
            requests:
              cpu: 100m
              memory: 200Mi
        imagePullSecrets:
        - name: default-secret  ##下載鏡像使用到的secret名
      [root@k8s-master01 ~]# kubectl create -f nginx-alpine.yaml
      pod/nginx-test-pod created
      [root@k8s-master01 ~]# kubectl get pod
      NAME             READY   STATUS    RESTARTS   AGE
      nginx-test-pod   1/1     Running   0          2m13s
      [root@k8s-master01 ~]# kubectl describe pod nginx-test-pod|grep -i account
      Service Account:  sa-example
            /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-mb8cd (ro)
      [root@k8s-master01 ~]# kubectl exec -it nginx-test-pod -- /bin/sh  ##進入pod,可以看到對應的secret文件,ca證書和token
      / # ls /var/run/secrets/kubernetes.io/serviceaccount
      ca.crt     namespace  token

      創建好sa我們可以再綁定role或clusterrole來賦予更精細化的權限。

      3 user account

      3.1 介紹

      前面說的service account在k8s集群中是給pod使用的,這里介紹的User Account,是給我們自己,也就是給人用的。

      3.2 為什么需要user account

      • 在k8s集群中跟linux操作系統是一樣的,我們默認的賬戶是:kubernetes-admin@kubernetes,管理員賬戶,權限也是最大的,在k8s集群中暢通無阻。

      但是在企業中,并不是只有我們一個人使用k8s集群,還有很多的研發人員都是需要使用集群的;這時我們需要給他們創建一些賬號,但是這些賬號權限又不能太大,以防誤刪資源,這個時候我們就能使用user account了。

      3.3 如何創建一個user account

      步驟如下

      • 創建用戶所需的證書文件和密鑰
      • 創建用戶
      • 創建角色
      • 將角色和用戶進行綁定

      3.3.1 為用戶生成證書

      前面介紹的sa賬戶,secret創建時會創建好證書,對于用戶的話我們需要自己創建證書。

      [root@k8s-master01 ~]# openssl genrsa -out singless.key 2048  ##給用戶創建一個私鑰
      [root@k8s-master01 ~]# openssl req -new -key singless.key -out singless.csr -subj "/CN=singless/O=devops" ##用此私鑰創建一個csr(證書簽名請求)文件,其中我們需要在subject里帶上用戶信息(CN為用戶名,O為用戶組),其中/O參數可以出現多次,即可以有多個用戶組:
      [root@k8s-master01 ~]# openssl x509 -req -in singless.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out singless.crt -days 365 ##找到K8S集群(API Server)的CA證書文件,其位置取決于安裝集群的方式,通常會在/etc/kubernetes/pki/路徑下,會有兩個文件,一個是CA證書(ca.crt),一個是CA私鑰(ca.key)。通過集群的CA證書和之前創建的csr文件,來為用戶頒發證書。-CA和-CAkey參數需要指定集群CA證書所在位置,-days參數指定此證書的過期時間,這里為365天。最后將證書(tom.crt)和私鑰(tom.key)保存起來,這兩個文件將被用來驗證API請求。

       

       

       

      3.3.2 創建用戶

      現在我們想要通過kubectl以singless的身份來操作集群,需要將singless的認證信息添加進kubectl的配置,即~/.kube/config中,通過以下命令將用戶singless的驗證信息添加進kubectl的配置:

      [root@k8s-master01 ~]# kubectl config set-credentials singless --client-certificate=singless.crt --client-key=singless.key
      User "singless" set.
      [root@k8s-master01 ~]# cat ~/.kube/config |tail -4  ##添加完成后在~/.kube/config可以看到新增了
      - name: singless
        user:
          client-certificate: /root/singless.crt
          client-key: /root/singless.key
      [root@k8s-master01 ~]# kubectl config set-context singless --cluster=kubernetes --namespace=* --user=singless  ##創建context,通過context來綁定用戶,來實現精細話的權限控制。context可以理解為登錄用戶時所需的環境變量。刪除使用kubectl config delete-context命令
      [root@k8s-master01 ~]# kubectl config get-contexts  ##查詢當前環境的context
      CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
      *         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin
                singless                      kubernetes   singless           *

      3.3.3 創建角色

      角色主要分為兩種:role和clusterrole,角色(role)是比較有限制性的,只針對于指定的資源生效。而集群角色(clusterrole)就權限就比較廣泛了,新建了一個集群角色之后,這個角色將對整個集群受影響。

      創建角色有兩種方法

      • 通過命令行進行創建
      [root@k8s-master01 ~]# kubectl create role myrole  --verb=get,list,watch --resource=pod,svc 創建了一個名叫myrole的角色,并且賦予它對pod、service有看的權限
      role.rbac.authorization.k8s.io/myrole created
      • 通過yaml文件進行創建
      [root@k8s-master01 ~]# cat myrole2.yaml
      apiVersion: rbac.authorization.k8s.io/v1
      #api版本,使用kubectl explain +【要查詢的資源,比如pod】
      kind: Role
      metadata:
        name: myrole2
      rules:          #規則
      - apiGroups: [""]  # 空字符串""表明使用支持所有的api版本,一般都放空
        resources: ["pods"]           #resources:資源,現在這些權限對哪些資源生效,這里寫的是pod,如果想要多寫幾個,就用逗號隔開,其實就是一個列表
        verbs: ["get", "watch", "list"]       #詳細的權限:這三個都是查看的權限。如果需要所有權限,直接填寫一個*號即可
      [root@k8s-master01 ~]# kubectl create -f myrole2.yaml
      role.rbac.authorization.k8s.io/myrole2 created

      查看創建的角色

      [root@k8s-master01 ~]# kubectl get role
      NAME      CREATED AT
      myrole    2023-07-18T09:22:51Z
      myrole2   2023-07-18T09:33:24Z

      3.3.4 角色綁定用戶

      [root@k8s-master01 ~]# kubectl create rolebinding myrole-binding --role=myrole2 --user=singless  ##將用戶和角色進行綁定
      [root@k8s-master01 ~]# kubectl get rolebinding -owide  ##查看綁定關系
      NAME             ROLE           AGE   USERS      GROUPS   SERVICEACCOUNTS
      myrole-binding   Role/myrole2   57s   singless

      3.4 使用賬戶

      下面的例子表明使用singless用戶可以看到pod,但是看不到svc,符合我們的前面創建role myrole2時所做的權限設置

      [root@k8s-master01 ~]# kubectl config use-context singless
      Switched to context "singless".
      [root@k8s-master01 ~]# kubectl get pod
      NAME             READY   STATUS    RESTARTS   AGE
      nginx-test-pod   1/1     Running   0          124m
      [root@k8s-master01 ~]# kubectl get svc
      Error from server (Forbidden): services is forbidden: User "singless" cannot list resource "services" in API group "" in the namespace "default"

      使用下列命令可以將context切換回管理員用戶

      [root@k8s-master01 ~]# kubectl config use-context kubernetes-admin@kubernetes
      posted @ 2025-10-29 14:32  singless233  閱讀(14)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产男人的天堂在线视频| 男女啪祼交视频| 亚洲人成网站观看在线观看| 亚洲精品一区二区三区综合| 99RE6在线视频精品免费下载| 中文字幕日韩有码国产| 在线观看美女网站大全免费| 青青草国产精品日韩欧美| 欧美成人VA免费大片视频| 欧美性受xxxx黑人猛交| 成年无码av片完整版| 九九热免费在线播放视频| 亚洲欧洲精品国产二码 | 久久精品日日躁夜夜躁| 伊人久久大香线蕉综合网站| 丁香五月亚洲综合在线国内自拍 | 亚洲成a人片在线观看中| 且末县| 久久永久视频| 卡一卡2卡3卡精品网站| 中文字幕日韩国产精品| 性做久久久久久久| 五月丁香激激情亚洲综合| 婷婷六月天在线| 一本大道久久东京热AV| 内射老妇bbwx0c0ck| 精品三级在线| 国产精品自偷一区在线观看| 亚洲蜜臀av乱码久久| 国产精品一区二区三区麻豆| 欧美成人猛片aaaaaaa| 26uuu另类亚洲欧美日本 | 亚洲国产成人精品区综合| 怀安县| 亚洲一区二区三区自拍天堂| 久久人人爽人人人人爽av| 免费无码中文字幕A级毛片| 亚洲成人四虎在线播放| 色欲av蜜桃一区二区三| 欧美人妻一区二区三区| 国厂精品114福利电影免费|