亚洲综合伊人,成人欧美一区二区三区视频不卡,欧美日韩在线高清,日韩国产午夜一区二区三区,大胆美女艺术,一级毛片毛片**毛片毛片,你瞅啥图片

您當(dāng)前的位置是:  首頁(yè) > 資訊 > 文章精選 >
 首頁(yè) > 資訊 > 文章精選 >

vSphere with Kubernetes實(shí)戰(zhàn)之:用戶訪問(wèn)控制

2020-07-24 10:12:00   作者:   來(lái)源:CTI論壇   評(píng)論:0  點(diǎn)擊:


  VMware 在2020年4月2日發(fā)布了vSphere 7.0的正式版。這個(gè)版本的vSphere最顯著的特性之一是它在hypervisor層內(nèi)部創(chuàng)建了Kubernetes控制平面。該功能使vSphere大大擴(kuò)展了它所能運(yùn)行的工作負(fù)載范圍,涵蓋了更多當(dāng)前流行的應(yīng)用程序。我們將此功能之前稱為“ Project Pacific”或WCP(工作負(fù)載控制平面),現(xiàn)在的正式名稱是“vSphere with Kubernetes”。要了解有關(guān)vSphere 7的新功能的更多信息,請(qǐng)?jiān)L問(wèn)我們的網(wǎng)站:https://www.vmware.com/products/vsphere.html。
  背 景 介 紹
  從上圖可以發(fā)現(xiàn),vSphere 7中的用戶角色比其他舊版本更多。我們?nèi)匀挥?ldquo;數(shù)據(jù)中心管理員”(VI Admin),他們管理著整個(gè)數(shù)據(jù)中心的計(jì)算,網(wǎng)絡(luò)和存儲(chǔ)資源。在vShpere 7中,數(shù)據(jù)中心管理員可以啟用和管理一種被稱為“ Supervisor Kubernetes”的全新群集,該群集在vSphere的hypervisor層面武裝了一個(gè)Kubernetes的控制中心。在“ Supervisor Kubernetes”群集中,數(shù)據(jù)中心管理員可以創(chuàng)建一個(gè)或多個(gè)命名空間(Namespace)。命名空間(Namespace)是“vSphere with Kubernetes”中的多租戶解決方案。每個(gè)命名空間都有隔離的網(wǎng)絡(luò)資源和訪問(wèn)控制范圍。數(shù)據(jù)中心管理員還可以給命名空間分配的CPU,內(nèi)存和存儲(chǔ)的資源配額。
  數(shù)據(jù)中心管理員可以將命名空間的各種權(quán)限委派給其他的用戶(User)或組(Group)。那些獲得“view”權(quán)限的用戶稱為“Namespace審計(jì)員”,他們可以監(jiān)控和觀察命名空間里的資源使用狀況;那些獲得“edit”權(quán)限的用戶稱為“Namespace管理員”,他們可以管理和控制命名空間里的資源,并且可以在命名空間內(nèi)創(chuàng)建一個(gè)或多個(gè)Tanzu Kubernetes群集(之前稱為Guest Cluster)。這些Namespace管理員還可以在命名空間中直接部署和運(yùn)行應(yīng)用程序(在虛擬機(jī)和Pod VM上),在這種情況下,它們也稱為“Supervisor 集群開(kāi)發(fā)者”。
  默認(rèn)情況下,“Namespace管理員”將成為新創(chuàng)建的Tanzu Kubernetes群集的“Tanzu群集管理員”。通過(guò)使用kubernetes的RBAC,“Namespace管理員”可以將集群管理員角色或更加細(xì)粒度的權(quán)限分配給其他用戶和組,這些用戶稱為“Tanzu集群開(kāi)發(fā)者”,他們負(fù)責(zé)在Tanzu Kubernetes集群上開(kāi)發(fā)和部署應(yīng)用程序。
  本文將通過(guò)實(shí)戰(zhàn)的方式,來(lái)一步步展示這些不同的角色是如何通過(guò)Kubernetes的客戶端命令“kubectl”,來(lái)訪問(wèn)vSphere With Kubernetes不同層次的集群,以及每個(gè)角色有哪些不同的權(quán)限和限制。本文共包括4部分的內(nèi)容:
  • “數(shù)據(jù)中心管理員”對(duì)Supervisor Kubernetes集群的訪問(wèn)
  • “Namespace管理員”對(duì)Supervisor Kubernetes集群的訪問(wèn)
  • “Tanzu集群管理員”對(duì)Tanzu Kubernetes集群的訪問(wèn)
  • “Tanzu集群開(kāi)發(fā)者”對(duì)Tanzu Kubernetes集群的訪問(wèn)
  1、“數(shù)據(jù)中心管理員”對(duì)Supervisor Kubernetes集群的訪問(wèn)
  數(shù)據(jù)中心管理員一般通過(guò)vSphere單點(diǎn)登錄(SSO)服務(wù)認(rèn)證的用戶,缺省的用戶名一般是administrator@vsphere.local。這個(gè)用戶通常是通過(guò)登錄vCenter Server的瀏覽器客戶端來(lái)進(jìn)行數(shù)據(jù)中心的管理。在這一節(jié)中我們看看,這個(gè)數(shù)據(jù)中心管理員是如何通過(guò)新的Kubernetes客戶端命令“kubectl”來(lái)管理vSpherew with Kubernetes。下面的實(shí)戰(zhàn)練習(xí)需要幾個(gè)前提條件:
  配置好Supervisor Kubernetes集群。請(qǐng)參考:Config a Supervisor Cluster
  創(chuàng)建并配置好Supervisor Kubernetes集群的命名空間。請(qǐng)參考:Configure Supervisor Cluster Namespaces
  下載并安裝好Kubernetes客戶端根據(jù)kubectl和vSphere的插件。請(qǐng)參考:Download and Install the Kubernetes CLI Tools for vSphere
  1.1 登錄Supervisor Kubernetes集群
  1、要想通過(guò)kubectl命令連接Supervisor集群,首先需要使用“數(shù)據(jù)中心管理員”的SSO的賬號(hào)登錄,可以使用以下的命令。其中“SUPERVISOR-CLUSTER-CONTROL-PLANE-IP-ADDRESS”是Supervisor集群控制節(jié)點(diǎn)的IP地址,通過(guò)vCenter Server管理控制臺(tái)瀏覽器客戶端可以查看。“VCENTER-SSO-USER”是管理員用戶名,一般為administrator@vsphere.local。
  kubectl vsphere login –server=SUPERVISOR-CLUSTER-CONTROL-PLANE-IP-ADDRESS–vsphere-username VCENTER-SSO-USER
  例如:
  $ kubectl vsphere login --server=10.117.233.1 --vsphere-username administrator@vsphere.local
  要注意的是:成功登錄后vSphere的kubectl插件會(huì)保存一個(gè)登錄憑證(token),這個(gè)憑證可以保證你在10小時(shí)內(nèi)不需要重新登錄系統(tǒng)就能直接訪問(wèn)集群。超過(guò)10小時(shí)則需要重新執(zhí)行這條登錄命令。
  2、顯示當(dāng)前可以訪問(wèn)的集群配置信息
  $ kubectl config get-contexts
  CURRENT   NAME            CLUSTER        AUTHINFO                                       NAMESPACE
  *         10.117.233.1    10.117.233.1   wcp:10.117.233.1:administrator@vsphere.local
  microservices   10.117.233.1   wcp:10.117.233.1:administrator@vsphere.local   microservices
  wangyu          10.117.233.1   wcp:10.117.233.1:administrator@vsphere.local   wangyu
  從上面的輸出中,您可以看到我們已經(jīng)在Supervisor集群中創(chuàng)建了兩個(gè)命名空間,分別為“microservices”和“ wangyu”。數(shù)據(jù)中心管理員可以訪問(wèn)Supervisor集群中所有的命名空間。第一行記錄顯示綁定的命名空間為空,其實(shí)是綁定到一個(gè)叫做“default”的命名空間上。您可以使用以下命令來(lái)更改當(dāng)前上下文(context)
  $ kubectl config use-context wangyu
  Switched to context "wangyu"
  更改上下文對(duì)于數(shù)據(jù)中心管理員是可選的,在當(dāng)前的命名空間里您可以使用“ -n”選項(xiàng),來(lái)操作其他命名空間的資源。例如:
  $ kubectl get pods -n microcervices
  1.2 數(shù)據(jù)中心管理員通過(guò)kubectl能夠做的事情
  1、數(shù)據(jù)中心管理員可以查看和操作一些特殊的kubernetes資源(例如namespaces和storageclass)。稍后您會(huì)發(fā)現(xiàn),這些資源的訪問(wèn)權(quán)限是別的用戶(例如Namespace管理員)所沒(méi)有的。
  $ kubectl get namespaces
  NAME                               STATUS   AGE
  default                            Active   4d20h
  kube-node-lease                    Active   4d20h
  kube-public                        Active   4d20h
  kube-system                        Active   4d20h
  microservices                      Active   2d2h
  vmware-system-capw                 Active   4d20h
  vmware-system-csi                  Active   4d20h
  vmware-system-kubeimage            Active   4d20h
  vmware-system-nsx                  Active   4d20h
  vmware-system-registry             Active   4d20h
  vmware-system-registry-754088061   Active   4d17h
  vmware-system-tkg                  Active   4d20h
  vmware-system-ucs                  Active   4d20h
  vmware-system-vmop                 Active   4d20h
  wangyu                             Active   4d20h
  $ kubectl get storageclass
  NAME                     PROVISIONER              AGE
  pacific-storage-policy   csi.vsphere.vmware.com   4d20h
  2、您甚至可以列出部署在系統(tǒng)命名空間中的Pod資源,例如,以“kube-”開(kāi)頭和“vmware-”開(kāi)頭的命名空間就是屬于系統(tǒng)的命名空間。
  $ kubectl get pods -n kube-system
  NAME                                                       READY   STATUS    RESTARTS   AGE
  coredns-7fb7656c66-65nc6                                   1/1     Running   0          5d
  coredns-7fb7656c66-9zp8z                                   1/1     Running   0          5d
  coredns-7fb7656c66-fgfml                                   1/1     Running   0          5d
  csr-signer-42164f156d72f36753e2cdfb7de0c558                1/1     Running   0          5d
  csr-signer-4216c813a129bb53c21f21e63990fd6b                1/1     Running   0          5d
  csr-signer-4216d818db629c2b035276f82acfdba3                1/1     Running   0          5d
  docker-registry-42164f156d72f36753e2cdfb7de0c558           1/1     Running   0          5d
  docker-registry-4216c813a129bb53c21f21e63990fd6b           1/1     Running   0          5d
  docker-registry-4216d818db629c2b035276f82acfdba3           1/1     Running   0          5d
  ……
  1.3數(shù)據(jù)中心管理員通過(guò)kubectl不能夠做的事情
  實(shí)際上,數(shù)據(jù)中心管理員也不是萬(wàn)能的,有不少資源的操作和訪問(wèn)是通過(guò)kubectl命令無(wú)法完成的。
  1、在上一小節(jié)中,您可能發(fā)現(xiàn)數(shù)據(jù)中心管理員可以列出系統(tǒng)命名空間中的資源。但是他不能將應(yīng)用程序部署到這些系統(tǒng)命名空間中。例如:
  $ kubectl create -f hello.yaml -n kube-system
  Error from server (Forbidden): error when creating "hello.yaml": deployments.apps is forbidden:
  User "sso:Administrator@vsphere.local" cannot create resource "deployments" in API group "apps"
  in the namespace "kube-system"
  實(shí)際上,只有那些在vCenter Server客戶端里顯示的命名空間(Menu → Workload Management),才能部署客戶自己開(kāi)發(fā)的應(yīng)用。如下圖所示:
  2、數(shù)據(jù)中心管理員無(wú)法使用kubectl命令來(lái)創(chuàng)建新的命名空間
  $ kubectl create namespace test01
  Error from server (Forbidden): namespaces is forbidden: User "sso:Administrator@vsphere.local"
  cannot create resource "namespaces" in API group "" at the cluster scope
  在此vSphere版本里,Supervisor集群中創(chuàng)建命名空間唯一有效的方法是通過(guò)vCenter Client Console。在今后的版本里可能會(huì)添加新的方法。
  3、另外還有一些其他的Kubernetes的資源是數(shù)據(jù)中心管理員通過(guò)kubectl命令也無(wú)法訪問(wèn)的,例如(role,rolebinding,psp,crd等等):
  $ kubectl get roles
  Error from server (Forbidden): roles.rbac.authorization.k8s.io is forbidden:
  User "sso:Administrator@vsphere.local" cannot list resource "roles" in API
  group "rbac.authorization.k8s.io" in the namespace "default"
  $ kubectl get rolebindings
  Error from server (Forbidden): rolebindings.rbac.authorization.k8s.io is forbidden:
  User "sso:Administrator@vsphere.local" cannot list resource "rolebindings" in API
  group "rbac.authorization.k8s.io" in the namespace "default"
  $ kubectl get customresourcedefinitions
  Error from server (Forbidden): customresourcedefinitions.apiextensions.k8s.io
  is forbidden: User "sso:Administrator@vsphere.local" cannot list resource
  "customresourcedefinitions" in API group "apiextensions.k8s.io" at the cluster scope
  $ kubectl get certificatesigningrequests
  Error from server (Forbidden): certificatesigningrequests.certificates.k8s.io
  is forbidden: User "sso:Administrator@vsphere.local" cannot list resource
  "certificatesigningrequests" in API group "certificates.k8s.io" at the cluster scope
  $ kubectl get psp
  Error from server (Forbidden): podsecuritypolicies.policy is forbidden:
  User "sso:Administrator@vsphere.local" cannot list resource "podsecuritypolicies"
  in API group "policy" at the cluster scope
  1.4 小結(jié)
  在本節(jié)中,您已經(jīng)知道如何以數(shù)據(jù)中心管理員(VI Admin)的身份通過(guò)“ kubectl”命令連接Supervisor集群,并進(jìn)行相應(yīng)的操作。實(shí)際上,數(shù)據(jù)中心管理員很少使用“ kubectl”命令,vCenter Server Client Console才是數(shù)據(jù)中心管理員的常用武器。通常,數(shù)據(jù)中心管理員會(huì)將命名空間的管理員權(quán)限委派給其他用戶,讓我們?cè)谙乱还?jié)中看到應(yīng)該怎么做。
  2、“Namespace管理員”對(duì)Supervisor Kubernetes集群的訪問(wèn)
  在Supervisor集群上創(chuàng)建命名空間后,正確使用這些命名空間的方式是將命名空間的管理員角色委派給其他現(xiàn)有vSphere SSO用戶(例如本地帳戶),而不是使用數(shù)據(jù)中心管理員“ administrator@vsphere.local”的身份。vSphere SSO可以通過(guò)Identity Federation技術(shù),來(lái)接入第三方的identity provider管理用戶和用戶組(請(qǐng)參考技術(shù)博客:https://blogs.vmware.com/vsphere/2020/03/vsphere-7-identity-federation.html)。當(dāng)然,最簡(jiǎn)單的方式就是通過(guò)vCenter Server 客戶端控制臺(tái)創(chuàng)建一個(gè)新的本地用戶,并為其分配命名空間的管理員角色。下面我們看看,這個(gè)Namespace管理員是如何被分配的,他是如何通過(guò)Kubernetes客戶端命令“kubectl”來(lái)管理vSpherew with Kubernetes。下面的實(shí)戰(zhàn)練習(xí)需要幾個(gè)前提條件:
  配置好Supervisor Kubernetes集群。請(qǐng)參考:Config a Supervisor Cluster
  創(chuàng)建并配置好Supervisor Kubernetes集群的命名空間。請(qǐng)參考:Configure Supervisor Cluster Namespaces
  下載并安裝好Kubernetes客戶端根據(jù)kubectl和vSphere的插件。請(qǐng)參考:Download and Install the Kubernetes CLI Tools for vSphere
  2.1 將Namespace的管理員權(quán)限代理給其他vSphere用戶
  1、在vCenter Server的客戶端以數(shù)據(jù)中心管理員的身份登錄。
  在vCenter Server的客戶端創(chuàng)建一個(gè)本地用戶(Administration → Single Sign On→ Users and Groups → Add User),如下圖所示:
  2、將supervisor集群命名空間的“edit”角色賦予剛才創(chuàng)建的用戶 (Menu → Workload Management → Namespaces → Your Namespace → Permissions → Add),如下圖所示:
  2.2 登錄Supervisor Kubernetes集群
  1、用剛才創(chuàng)建的用戶來(lái)登錄到Supervisor集群上:
  $ kubectl vsphere login --server=10.117.233.1 --vsphere-username wangyu@vsphere.local
  要注意的是:成功登錄后,vSphere的kubectl插件會(huì)保存一個(gè)登錄憑證(token),這個(gè)憑證可以保證你在10小時(shí)內(nèi)不需要重新登錄系統(tǒng)就能直接訪問(wèn)集群。超過(guò)10小時(shí)則需要重新執(zhí)行這條登錄命令。
  2、成功登錄后,vSphere的kubectl插件會(huì)根據(jù)登錄返回的信息自動(dòng)更新kubeconfig配置文件。如果當(dāng)前這個(gè)用戶被賦予多個(gè)命名空間的權(quán)限, 所有這些命名空間都會(huì)被列到上下文里(contexts):
  $ kubectl config get-contexts
  CURRENT   NAME      CLUSTER      AUTHINFO                                NAMESPACE
  *         wangyu    10.117.233.1 wcp:10.117.233.1:wangyu@vsphere.local   wangyu
  2.3 Namespace管理員通過(guò)kubectl能夠做的事情
  1、Namespace管理員可以在當(dāng)前的命名空間里查看和操作一些kubernetes資源:
  $ kubectl get serviceaccount
  NAME                     SECRETS   AGE
  default                  1         6d1h
  my-tanzu-cluster-ccm     1         5d6h
  my-tanzu-cluster-pvcsi   1         5d6h
  $ kubectl get secret
  NAME                                 TYPE                                  DATA   AGE
  default-token-lqfwr                  kubernetes.io/service-account-token   3      6d1h
  wangyu-default-image-pull-secret     kubernetes.io/dockerconfigjson        1      5d22h
  wangyu-default-image-push-secret     kubernetes.io/dockerconfigjson        1      5d22h
  2、Namespace管理員還可以在當(dāng)前的命名空間部署和運(yùn)行自己開(kāi)發(fā)的應(yīng)用。在這種情況下, Namespace管理員搖身一變,稱為“Supervisor 集群開(kāi)發(fā)者”。
  $ kubectl create -f hello.yaml
  deployment.apps/helloweb created
  $ kubectl get pods
  NAME                        READY   STATUS         RESTARTS   AGE
  helloweb-7cd97b9cb8-cdw22   0/1     Running        0          74s
  helloweb-7cd97b9cb8-vzcc5   0/1     Running        0          4s
  3、Namespace管理員還可以在當(dāng)前的命名空間部署一個(gè)Tanzu Kubernetes集群。在這種情況下, Namespace管理員缺省的稱為 “Tanzu集群管理員”。創(chuàng)建Tanzu集群的具體步驟,請(qǐng)參見(jiàn)官方文檔(https://docs.vmware.com/en/VMware-vSphere/7.0/vmware-vsphere-with-kubernetes/GUID-DBF5D8F2-2A28-4730-8AA3-32E9CE1C3BB8.html)
  $ kubectl create -f tanzucluster.yaml
  ……
  $ kubectl get tanzukubernetescluster
  NAME             CONTROLPLANE  WORKER  DISTRIBUTION          AGE    PHASE
  my-tanzu-cluster 1             3       v1.16.8+vmware.1    5d6h   running
  2.4 Namespace管理員通過(guò)kubectl不能夠做的事情
  1、數(shù)據(jù)中心管理員沒(méi)有權(quán)限做的事情,Namespace管理員都沒(méi)有權(quán)限做。請(qǐng)參考上一節(jié)的內(nèi)容。
  2、Namespace管理員不能在他沒(méi)有賦權(quán)的命名空間里訪問(wèn)和操作相關(guān)Kubernetes資源。
  3、有些Kubernetes資源屬于全局資源,只有數(shù)據(jù)中心管理員才有權(quán)限操作,其他任何Namespace管理員都沒(méi)有權(quán)限,例如namespace,node和storageclass等等。
  $ kubectl get nodes
  Error from server (Forbidden): nodes is forbidden: User "sso:wangyu@vsphere.local"
  cannot list resource "nodes" in API group "" at the cluster scope
  $ kubectl get namespaces
  Error from server (Forbidden): namespaces is forbidden: User "sso:wangyu@vsphere.local"
  cannot list resource "namespaces" in API group "" at the cluster scope
  $ kubectl get storageclass
  Error from server (Forbidden): storageclasses.storage.k8s.io is forbidden: User
  "sso:wangyu@vsphere.local" cannot list resource "storageclasses" in API group
  "storage.k8s.io" at the cluster scope
  2.5  小結(jié)
  在本節(jié)中,您已經(jīng)知道如何以Namespace管理員的身份通過(guò)“ kubectl”命令連接Supervisor集群,并對(duì)賦權(quán)的命名空間進(jìn)行相應(yīng)的操作。實(shí)際上,更多的Kubernetes應(yīng)用通常都部署在Tanzu Kubernetes集群上。讓我們?cè)谙聨坠?jié)中看看如何以不同的身份訪問(wèn)Tanzu Kubernetes集群的。
  3、“Tanzu集群管理員”對(duì)Tanzu Kubernetes集群的訪問(wèn)
  Namespace管理員在特定的命名空間里創(chuàng)建了Tanzu Kubernetes集群以后,此Namespace管理員會(huì)缺省的成為這個(gè)Tanzu Kubernetes集群的管理員。在這一節(jié)中,我們看看如何以兩種不同的方式以管理員的權(quán)限來(lái)訪問(wèn)Tanzu Kubernetes集群。下面的實(shí)戰(zhàn)練習(xí)需要幾個(gè)前提條件:
  • 配置好Supervisor Kubernetes集群。請(qǐng)參考:Config a Supervisor Cluster
  • 創(chuàng)建并配置好Supervisor Kubernetes集群的命名空間。請(qǐng)參考:Configure Supervisor Cluster Namespaces
  • 下載并安裝好Kubernetes客戶端根據(jù)kubectl和vSphere的插件。請(qǐng)參考:Download and Install the Kubernetes CLI Tools for vSphere
  • 將Namespace的管理員角色分配給其他用戶。請(qǐng)參考上一節(jié)。
  • 在命名空間里創(chuàng)建一個(gè)或多個(gè)Tanzu Kubernetes 集群。請(qǐng)參考:How to Create Tanzu Kubernetes Clusters
  3.1   Namespace管理員通過(guò)SSO賬號(hào)登錄Tanzu Kubernetes集群
  1、在Namespace管理員在特定的命名空間里創(chuàng)建了Tanzu Kubernetes集群以后,此Namespace管理員會(huì)缺省的成為這個(gè)Tanzu Kubernetes集群的管理員。可以使用以下的命令通過(guò)Namespace管理員的SSO賬號(hào)來(lái)登錄Tanzu Kubernetes集群。
  kubectl vsphere login  \
  –server=SUPERVISOR-CLUSTER-CONTROL-PLANE-IP  \
  –tanzu-kubernetes-cluster-name TANZU-KUBERNETES-CLUSTER-NAME \
  –tanzu-kubernetes-cluster-namespace SUPERVISOR-NAMESPAC-NAME  \
  –vsphere-username NAMESPACE-ADMIN-SSO-USER-NAME \
  –insecure-skip-tls-verify
  例如:
  $ kubectl vsphere login --server=10.117.233.1 --tanzu-kubernetes-cluster-name \
  my-tanzu-cluster --tanzu-kubernetes-cluster-namespace wangyu --vsphere-username \
  wangyu@vsphere.local --insecure-skip-tls-verify
  $ kubectl get nodes
  NAME                                        STATUS   ROLES    AGE    VERSION
  my-tanzu-cluster-control-plane-kffsj        Ready    master   6d4h   v1.16.8+vmware.1
  my-tanzu-cluster-workers-c5jwz-86b575c4bb   Ready    <none>   6d4h   v1.16.8+vmware.1
  my-tanzu-cluster-workers-c5jwz-86b575c4bb   Ready    <none>   6d4h   v1.16.8+vmware.1
  my-tanzu-cluster-workers-c5jwz-86b575c4bb   Ready    <none>   6d4h   v1.16.8+vmware.1
  2、顯示當(dāng)前可以訪問(wèn)的集群配置信息
  $ kubectl config get-contexts
  CURRENT  NAME              CLUSTER        AUTHINFO                              NAMESPACE
  wangyu            10.117.233.1   wcp:10.117.233.1:wangyu@vsphere.local wangyu
  *        my-tanzu-cluster  10.117.233.3   wcp:10.117.233.3:wangyu@vsphere.local
  要注意的是:成功登錄后vSphere的kubectl插件會(huì)保存一個(gè)登錄憑證(token),這個(gè)憑證可以保證你在10小時(shí)內(nèi)不需要重新登錄系統(tǒng)就能直接訪問(wèn)集群。超過(guò)10小時(shí)則需要重新執(zhí)行這條登錄命令。
  3.2  Namespace管理員通過(guò)kubeconfig文件登錄Tanzu Kubernetes集群
  這是用Tanzu集群管理員的身份來(lái)登錄Tanzu Kubernetes集群的另外一種方式,這種方式不受10個(gè)小時(shí)的限制,每次訪問(wèn)Tanzu Kubernetes集群的時(shí)候不需要有登錄的過(guò)程。雖然很方便,但是不太安全,一旦用戶拿到這個(gè)管理員授權(quán)身份,就會(huì)一直有效。
  1、用Namespace管理員的身份登錄到Supervisor集群上:
  $ kubectl vsphere login --server=10.117.233.1 --vsphere-username wangyu@vsphere.local
  2、用Namespace管理員的身份通過(guò)以下命令從Supervisor集群當(dāng)中獲取Tanzu集群管理員的秘鑰信息,并將它保存到一個(gè)文件中:
  kubectl get secret CLUSTER-NAME-kubeconfig -o jsonpath='{.data.value}’ | base64 -d > KUBECONFIG-NAME
  例如:
  $ kubectl get secret my-tanzu-cluster-kubeconfig -o jsonpath='{.data.value}' | base64 -d \
  > my-tanzu-cluster-kubeconfig.yaml
  3、設(shè)置系統(tǒng)環(huán)境變量KUBECONFIG,指向上一步保存的文件,來(lái)直接訪問(wèn)Tanzu Kubernetes集群:
  $ export KUBECONFIG =./my-tanzu-cluster-kubeconfig.yaml
  $ kubectl config get-contexts
  CURRENT   NAME                              CLUSTER            AUTHINFO         NAMESPACE
  *         kubernetes-admin@my-tanzu-cluster my-tanzu-cluster   kubernetes-admin
  $ kubectl get nodes
  NAME                                        STATUS   ROLES    AGE    VERSION
  my-tanzu-cluster-control-plane-kffsj        Ready    master   6d4h   v1.16.8+vmware.1
  my-tanzu-cluster-workers-c5jwz-86b575c4bbt  Ready    <none>   6d4h   v1.16.8+vmware.1
  my-tanzu-cluster-workers-c5jwz-86b575c4bb   Ready    <none>   6d4h   v1.16.8+vmware.1
  my-tanzu-cluster-workers-c5jwz-86b575c4bb   Ready    <none>   6d4h   v1.16.8+vmware.1
  3.3  小結(jié)
  在本節(jié)中,您已經(jīng)知道如何以兩種不同的方式來(lái)訪問(wèn)Tanzu Kubernetes集群。這兩種方式的用戶都屬于Tanzu集群管理員。在日常開(kāi)發(fā)工作中,開(kāi)發(fā)人員訪問(wèn)Kubernetes集群的時(shí)候并不需要管理員的權(quán)限。在下節(jié)中,我么看看如何給Tanzu Kubernetes集群的開(kāi)發(fā)人員賦予更加細(xì)粒度的訪問(wèn)權(quán)限。
  4、“Tanzu集群開(kāi)發(fā)者”對(duì)Tanzu Kubernetes集群的訪問(wèn)
  創(chuàng)建Tanzu Kubernetes集群后,作為集群管理員,您將在集群上進(jìn)行大量管理工作。例如:創(chuàng)建不同的命名空間(注意這是Tanzu集群的命名空間,要和Supervisor集群的命名空間區(qū)分開(kāi)來(lái)),為其分配資源配額,并為不同的開(kāi)發(fā)人員分配不同的權(quán)限。有兩種方法可以使開(kāi)發(fā)人員訪問(wèn)Tanzu Kubernetes集群,一種方法是向vSphere SSO用戶分配權(quán)限,另一種方法是使用Kubernetes中的Service Account Token。下面的實(shí)戰(zhàn)練習(xí)需要幾個(gè)前提條件:
  配置好Supervisor Kubernetes集群。請(qǐng)參考:Config a Supervisor Cluster
  創(chuàng)建并配置好Supervisor Kubernetes集群的命名空間。請(qǐng)參考:Configure Supervisor Cluster Namespaces.
  下載并安裝好Kubernetes客戶端根據(jù)kubectl和vSphere的插件。請(qǐng)參考:Download and Install the Kubernetes CLI Tools for vSphere
  將Namespace的管理員角色分配給其他用戶。請(qǐng)參考上一節(jié)。
  在命名空間里創(chuàng)建一個(gè)或多個(gè)Tanzu Kubernetes 集群。請(qǐng)參考:How to Create Tanzu Kubernetes Clusters.
  4.1    “Tanzu集群開(kāi)發(fā)者”通過(guò)SSO賬號(hào)訪問(wèn)Tanzu Kubernetes集群
  1、用Tanzu集群管理員的身份登錄到Tanzu Kubernetes集群上。具體步驟請(qǐng)參考上一節(jié)。
  2、在以下示例中,我們將創(chuàng)建兩個(gè)命名空間(分別名為dev和test),一個(gè)角色(Role)(名為devrole),一些權(quán)限設(shè)置(在pods和deployments上的操作)和一個(gè)角色綁定(RoleBinding)。在RoleBinding中,我們將devrole與vSphere SSO用戶“ dev”連接,這意味著我們將命名空間中的“ dev”權(quán)限授予了SSO用戶“ dev@vsphere.local”。請(qǐng)注意,vSphere系統(tǒng)中必須已經(jīng)存在這個(gè)名為“dev”的SSO用戶。如何在vSphere中創(chuàng)建本地的SSO用戶,請(qǐng)參見(jiàn)第二節(jié)
  $ kubectl create ns dev
  $ kubectl create ns test
  $ more devRolebindings.yaml
  kind: Role
  apiVersion: rbac.authorization.k8s.io/v1
  metadata:
  name: devrole
  namespace: dev
  rules:
  - apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "create","list","update", "delete","watch"]
  - apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["get", "create","list","update", "delete","watch"]
  ---
  kind: RoleBinding
  apiVersion: rbac.authorization.k8s.io/v1
  metadata:
  name: rolebinding-dev
  namespace: dev
  roleRef:
  kind: Role
  name: devrole
  apiGroup: ""
  subjects:
  - kind: User
  name: sso:dev@vsphere.local
  apiGroup: rbac.authorization.k8s.io
  $ kubectl apply -f devRolebindings.yaml
  role.rbac.authorization.k8s.io/devrole created
  rolebinding.rbac.authorization.k8s.io/rolebinding-dev created
  3、使用名為“dev”的vSphere SSO用戶來(lái)登錄Tanzu Kubernetes集群
  $ kubectl vsphere login --server=10.117.233.1 --tanzu-kubernetes-cluster-name \
  my-tanzu-cluster --tanzu-kubernetes-cluster-namespace wangyu --vsphere-username \
  dev@vsphere.local --insecure-skip-tls-verify
  要注意的是:成功登錄后vSphere的kubectl插件會(huì)保存一個(gè)登錄憑證(token),這個(gè)憑證可以保證你在10小時(shí)內(nèi)不需要重新登錄系統(tǒng)就能直接訪問(wèn)集群。超過(guò)10小時(shí)則需要重新執(zhí)行這條登錄命令。
  4、驗(yàn)證一下當(dāng)前的dev用戶能夠在dev的命名空間里部署Deployments和Pods資源:
  $ kubectl create deployment nginx --image=nginx -n dev
  deployment.apps/nginx created
  $ kubectl get deployments -n dev
  NAME    READY   UP-TO-DATE   AVAILABLE   AGE
  nginx   0/1     1            0           19s
  $ kubectl get pods -n dev
  NAME                     READY       STATUS       RESTARTS     AGE
  nginx-86c57db685-bczhq   1/1         Running      0            2m35s
  5、驗(yàn)證一下當(dāng)前的dev用戶不能夠在dev的命名空間里操作services資源
  $ kubectl get services -n dev
  Error from server (Forbidden): services is forbidden: User "sso:dev@vsphere.local"
  cannot list resource "services" in API group "" in the namespace "dev"
  6、驗(yàn)證一下當(dāng)前的dev用戶不能夠在其他命名空間里(例如test)操作deployments資源
  $  kubectl create deployment nginx --image=nginx -n test
  Error from server (Forbidden):  deployments.apps is forbidden: User
  "sso:dev@vsphere.local" cannot create resource "deployments" in API
  group "" in the namespace "test"
  4.2   “Tanzu集群開(kāi)發(fā)者”通過(guò)Service Account Token訪問(wèn)Tanzu Kubernetes集群
  1、用Tanzu集群管理員的身份登錄到Tanzu Kubernetes集群上。具體步驟請(qǐng)參考上一節(jié)。
  2、在以下示例中,我們將在名為“test”的命名空間中創(chuàng)建一個(gè)名為“ testaccount”的Service Account。然后我們創(chuàng)建一個(gè)名為“ testrole”的角色(Role),一些權(quán)限規(guī)則(rules)來(lái)對(duì)Pods和Deployments資源的進(jìn)行操作。接著我們創(chuàng)建一個(gè)角色綁定(RoleBinding),將“ testvrole”與“ testaccount”連接起來(lái),這意味著我們將命名空間“ test”的權(quán)限授予了名為“ testaccount”這個(gè)Service Account。
  $ more saToTest.yaml
  apiVersion: v1
  kind: ServiceAccount
  metadata:
  name: testaccount
  namespace: test
  ---
  kind: Role
  apiVersion: rbac.authorization.k8s.io/v1
  metadata:
  name: testrole
  namespace: test
  rules:
  - apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "create","list","update", "delete","watch"]
  - apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["get", "create","list","update", "delete","watch"]
  ---
  kind: RoleBinding
  apiVersion: rbac.authorization.k8s.io/v1
  metadata:
  name: rolebinding-test
  namespace: test
  roleRef:
  kind: Role
  name: testrole
  apiGroup: ""
  subjects:
  - kind: ServiceAccount
  name: testaccount
  namespace: test
  $ kubectl apply -f satoTest.yaml -n test
  serviceaccount/testaccount created
  role.rbac.authorization.k8s.io/testrole created
  rolebinding.rbac.authorization.k8s.io/rolebinding-test created
  3、獲得這個(gè)Service Account Token的字符串:
  $ TOKENNAME=`kubectl -n test get serviceaccount/testaccount -o jsonpath='{.secrets[0].name}’`
  $ TOKENVALUE=`kubectl -n test get secret $TOKENNAME -o jsonpath='{.data.token}'| base64 --decode`
  $ echo $TOKENVALUE
  eyJhbGciOiJSUzI1NiIsImtpZCI6Im1tNEZLTGtSYnIxMXNxW……
  4、獲得Tanzu Kubernetes集群API Server的IP地址和證書(shū)信息:
  $  SERVERNAME=`kubectl config view --flatten --minify -o jsonpath='{.clusters[0].cluster.server}'`
  $ CERTIFICATE=`kubectl config view --flatten --minify -o jsonpath='{.clusters[0].cluster.certificate-authority-data}'`
  $ echo $SERVERNAME
  https://10.117.233.3:6443
  $ echo $CERTIFICATE
  LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JS……
  5、創(chuàng)建一個(gè)文件sa-kubeconfig.yaml,包含下面的內(nèi)容,并且將文件中的占位符用上面·獲得的字符串$TOKENVALUE, $SERVERNAME和$CERTIFICATE替換:
  apiVersion: v1
  kind: Config
  users:
  - name: testaccount
  user:
  token: <replace this with $TOKENVALUE>
  clusters:
  - cluster:
  certificate-authority-data: <replace this with $CERTIFICATE>
  server: <replace this with $SERVERNAME>
  name: my-tanzu-cluster
  contexts:
  - context:
  cluster: my-tanzu-cluster
  user: testaccount
  name: test-my-tanzu
  current-context: test-my-tanzu
  6、將這個(gè)文件發(fā)給用戶,讓他設(shè)置系統(tǒng)環(huán)境變量,來(lái)直接訪問(wèn)Tanzu Kubernetes集群:
  $ export KUBECONFIG =./sa-kubeconfig.yaml
  7、驗(yàn)證一下當(dāng)前的service account用戶能夠在test的命名空間里部署Deployments和Pods資源:
  $ kubectl create deployment nginx --image=nginx -n test
  deployment.apps/nginx created
  $ kubectl get deployments -n test
  NAME    READY   UP-TO-DATE   AVAILABLE   AGE
  nginx   0/1     1            0           19s
  $ kubectl get pods -n test
  NAME                     READY  STATUS     RESTARTS  AGE
  nginx-86c57db685-bczhq   1/1    Running    0         2m35s
  8、驗(yàn)證一下當(dāng)前的service account用戶不能夠在test的命名空間里操作service資源
  $ kubectl get services -n test
  Error from server (Forbidden): services is forbidden: User
  "system:serviceaccount:test:testaccount" cannot list resource
  "services" in API group "" in the namespace "test"
  9、驗(yàn)證一下當(dāng)前的service account用戶不能夠在其他命名空間里(例如dev)操作Deployments資源
  $  kubectl create deployment nginx --image=nginx -n dev
  Error from server (Forbidden):  deployments.apps is forbidden: User
  "system:serviceaccount:test:testaccount" cannot create resource "deployments"
  in API group "" in the namespace "dev"
  4.3  小結(jié)
  在本節(jié)中,您已經(jīng)知道如何以兩種不同的方式來(lái)給Tanzu Kubernetes集群的開(kāi)發(fā)人員分配權(quán)限。第一種方式一般用于給現(xiàn)有的用戶來(lái)分配權(quán)限,要求對(duì)應(yīng)的用戶已經(jīng)在vSphere SSO系統(tǒng)中存在。第二種方法常用于云管軟件和Kubernetes集群的結(jié)合,可以根據(jù)具體的權(quán)限要求動(dòng)態(tài)的產(chǎn)生用戶登錄所需要的配置文件。
  5、總結(jié)
  用戶對(duì)vSphere with Kubernetes的訪問(wèn)控制的了解,是用戶開(kāi)始使用這個(gè)產(chǎn)品最重要的環(huán)節(jié)之一。通過(guò)對(duì)系統(tǒng)不同層次的訪問(wèn)控制進(jìn)行全面的了解,架構(gòu)師和系統(tǒng)管理員才能進(jìn)行數(shù)據(jù)中心安全的規(guī)劃和設(shè)置。
【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

專(zhuān)題

CTI論壇會(huì)員企業(yè)

云林县| 水富县| 昌江| 吉林市| 合阳县| 清新县| 沙湾县| 余干县| 东方市| 客服| 福贡县| 仙游县| 肥东县| 华蓥市| 东山县| 德格县| 湘潭市| 鹤岗市| 广丰县| 闸北区| 齐河县| 蛟河市| 苍梧县| 嘉祥县| 修武县| 晋江市| 随州市| 溆浦县| 唐山市| 柳河县| 合川市| 溧水县| 吉木萨尔县| 青田县| 泸溪县| 湛江市| 林甸县| 丹凤县| 日喀则市| 神木县| 徐水县|