内容简介:Kubernetes有许多身份验证机制来验证谁实际访问群集资源。完整列表检查让我们显示文件及其结构(密码,用户名,userId):
Kubernetes有许多身份验证机制来验证谁实际访问群集资源。完整列表检查 身份验证策略列表 。在这个演示中,让我们测试最简单的 静态密码文件
演示先决条件
- Minikube kubernetes集群
- 静态密码文件名为users.csv
让我们显示文件及其结构(密码,用户名,userId):
$ pwd /Users/tomask79/workspace $ cat users.csv tomask123,tomask79,100
使用基本身份验证启动Minikube群集
第一步是将位于当前目录中的密码文件users.csv挂载到Minikube中。 让我们使用/ var / lib / localkube / certs /目录来获取minikube vm和apiserver容器之间共享的内容。
$ minikube mount $(pwd)/:/<b>var</b>/lib/localkube/certs/mini Mounting /Users/tomask79/workspace/ into /<b>var</b>/lib/localkube/certs/mini on the minikube VM This daemon process needs to stay alive <b>for</b> the mount to still be accessible...
让进程按照建议运行并打开另一个终端,使用该文件作为静态密码资源启动minikube,这样实现基本身份验证。
$ minikube start --extra-config=apiserver.basic-auth-file=/<b>var</b>/lib/localkube/certs/mini/users.csv --kubernetes-version=v1.10.0 Starting local Kubernetes v1.10.0 cluster... Starting VM... Getting VM IP address... Moving files into cluster... Setting up certs... Connecting to cluster... Setting up kubeconfig... Starting cluster components... Kubectl is now configured to use the cluster. Loading cached images from config file.
好的Minikube正在运行。当然,我们应该验证基本属性。
$ minikube ip 192.168.99.100 $ minikube version minikube version: v0.28.2 $ kubectl cluster-info Kubernetes master is running at https:<font><i>//192.168.99.100:8443</i></font><font> KubeDNS is running at https:</font><font><i>//192.168.99.100:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy</i></font><font> </font>
通过基本身份验证与Kubernetes API交互
为了与 Kubernetes API服务器 交互,您基本上有两个选择:
- 通过REST API直接调用
- 使用最终调用REST API的Kubectl。
首先让我们尝试第一个选项,让pod在默认命名空间中运行。要通过针对API服务器的基本身份验证进行身份验证,文档说:
从http客户端使用基本身份验证时,API服务器需要 一个值为Basic BASE64ENCODED(USER:PASSWORD)的Authorization 标头。
首先让我们创建不正确凭据的Base64字符串(我们只配置了用户tomask79):
$ echo -n baduser:badpassword | base64 YmFkdXNlcjpiYWRwYXNzd29yZA==
现在使用此Base64字符串来获取在默认命名空间内运行的pod:
$ curl -H <font>"Authorization: Basic YmFkdXNlcjpiYWRwYXNzd29yZA=="</font><font> https:</font><font><i>//192.168.99.100:8443/api/v1/namespaces/default/pods -k</i></font><font> { </font><font>"kind"</font><font>: </font><font>"Status"</font><font>, </font><font>"apiVersion"</font><font>: </font><font>"v1"</font><font>, </font><font>"metadata"</font><font>: { }, </font><font>"status"</font><font>: </font><font>"Failure"</font><font>, </font><font>"message"</font><font>: </font><font>"Unauthorized"</font><font>, </font><font>"reason"</font><font>: </font><font>"Unauthorized"</font><font>, </font><font>"code"</font><font>: 401 } </font>
我们得到了我们的期望结果。在下一步中,让我们准备正确凭据的Base64字符串:
$ cat users.csv tomask123,tomask79,100 $ echo -n tomask79:tomask123 | base64 dG9tYXNrNzk6dG9tYXNrMTIz
并再次在默认命名空间内运行pods:
$ curl -H <font>"Authorization: Basic dG9tYXNrNzk6dG9tYXNrMTIz"</font><font> https:</font><font><i>//192.168.99.100:8443/api/v1/namespaces/default/pods -k</i></font><font> { </font><font>"kind"</font><font>: </font><font>"Status"</font><font>, </font><font>"apiVersion"</font><font>: </font><font>"v1"</font><font>, </font><font>"metadata"</font><font>: { }, </font><font>"status"</font><font>: </font><font>"Failure"</font><font>, </font><font>"message"</font><font>: </font><font>"pods is forbidden: User \"tomask79\" cannot list pods in the namespace \"default\""</font><font>, </font><font>"reason"</font><font>: </font><font>"Forbidden"</font><font>, </font><font>"details"</font><font>: { </font><font>"kind"</font><font>: </font><font>"pods"</font><font> }, </font><font>"code"</font><font>: 403 } </font>
嗯,tomask79用户没有权限查看默认命名空间内的pod。那讲得通。 要解决这个问题,我们需要 RoleBinding ,它是单个命名空间和clusteroles之一。 clusterRoles 集群角色有四种默认类型:
- cluster-admin
- admin
- edit
- view
我们希望用户tomask79只能查看pod,所以让我们给他一个view集群角色:
$ kubectl create rolebinding tomask79-view-binding-<b>default</b> --clusterrole=view --user=tomask79 --namespace=<b>default</b> rolebinding.rbac.authorization.k8s.io/tomask79-view-binding-<b>default</b> created
并且这次再次从默认命名空间运行pods:
$ curl -H <font>"Authorization: Basic dG9tYXNrNzk6dG9tYXNrMTIz"</font><font> https:</font><font><i>//192.168.99.100:8443/api/v1/namespaces/default/pods -k</i></font><font> { </font><font>"kind"</font><font>: </font><font>"PodList"</font><font>, </font><font>"apiVersion"</font><font>: </font><font>"v1"</font><font>, </font><font>"metadata"</font><font>: { </font><font>"selfLink"</font><font>: </font><font>"/api/v1/namespaces/default/pods"</font><font>, </font><font>"resourceVersion"</font><font>: </font><font>"1054"</font><font> }, </font><font>"items"</font><font>: [] } </font>
API服务器返回了pod!
Kubectl和具有不同用户的多个上下文
大多数情况下,您希望使用 Kubectl 与API Server进行 迭代 。通过Kubectl的配置允许您通过切换上下文来 访问多个集群 。让我们使用这个想法并使用相同的集群创建新的kubectl上下文,但是使用新注册的tomask79用户
首先让我们将新用户添加到当前的kubectl配置中:
$ kubectl config set-credentials tomask79 --username=tomask79 --password=tomask123 User <font>"tomask79"</font><font> set. </font>
很好,让我们检查一下用户添加的配置:
$ kubectl config view apiVersion: v1 clusters: - cluster: certificate-authority: /Users/tomask79/.minikube/ca.crt server: https:<font><i>//192.168.99.100:8443</i></font><font> name: minikube contexts: - context: cluster: minikube user: minikube name: minikube current-context: minikube kind: Config preferences: {} users: - name: minikube user: client-certificate: /Users/tomask79/.minikube/client.crt client-key: /Users/tomask79/.minikube/client.key - name: tomask79 user: password: tomask123 username: tomask79 </font>
我们希望能够在访问相同的minikube集群时在用户之间切换,所以让我们添加一个上下文指向minikube集群,但需要通过tomask79用户访问:
$ kubectl config set-context tomask79-context --cluster=minikube --user=tomask79 Context <font>"tomask79-context"</font><font> created. </font>
好的,让我们切换到新的上下文:
$ kubectl config use-context tomask79-context Switched to context <font>"tomask79-context"</font><font>. </font>
并显示最终配置:
$ kubectl config view apiVersion: v1 clusters: - cluster: certificate-authority: /Users/tomask79/.minikube/ca.crt server: https:<font><i>//192.168.99.100:8443</i></font><font> name: minikube contexts: - context: cluster: minikube user: minikube name: minikube - context: cluster: minikube user: tomask79 name: tomask79-context current-context: tomask79-context kind: Config preferences: {} users: - name: minikube user: client-certificate: /Users/tomask79/.minikube/client.crt client-key: /Users/tomask79/.minikube/client.key - name: tomask79 user: password: tomask123 username: tomask79 </font>
现在来自kubectl运行的所有内容都将作为“tomask79”用户身份!
$ kubectl get pods No resources found.
这些是我们已经授予tomask79用户的默认命名空间中的pod。 现在让我们试试kube-public命名空间:
$ kubectl get -n kube-<b>public</b> pods No resources found. Error from server (Forbidden): pods is forbidden: User <font>"tomask79"</font><font> cannot list pods in the namespace </font><font>"kube-public"</font><font> </font>
Kube-public命名空间仍然禁止tomask79用户。如果我们尝试在他的帐户下创建RoleBinding,该怎么办?)
$ kubectl create rolebinding tomask79-view-binding-<b>public</b> --clusterrole=view --user=tomask79 --namespace=kube-<b>public</b> Error from server (Forbidden): rolebindings.rbac.authorization.k8s.io is forbidden: User <font>"tomask79"</font><font> cannot create rolebindings.rbac.authorization.k8s.io in the namespace </font><font>"kube-public"</font><font> </font>
说得通。因此,让我们切换到默认上下文,允许tomask79用户访问kube-public命名空间 并切换回tomask79上下文来测试它。
$ kubectl config use-context minikube Switched to context <font>"minikube"</font><font>. $ kubectl create rolebinding tomask79-view-binding-<b>public</b> --clusterrole=view --user=tomask79 --namespace=kube-<b>public</b> rolebinding.rbac.authorization.k8s.io/tomask79-view-binding-<b>public</b> created $ kubectl config use-context tomask79-context Switched to context </font><font>"tomask79-context"</font><font>. $ kubectl get -n kube-<b>public</b> pods No resources found. </font>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 堆排序动画演示,Python代码演示,看不懂你砍我!
- GraphQL案例演示
- 中心极限定理的Matlab演示
- 中心极限定理的Matlab演示
- Activity启动模式(GIF 动态演示)
- Node.js排除内存泄漏演示
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。