加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Kubernetes身份认证和授权操作全攻略:K8s 访问控制入门

发布时间:2019-08-15 03:25:58 所属栏目:优化 来源:Rancher
导读:副标题#e# 随着Kubernetes被广泛使用,成为业界公认的容器编排管理的标准框架,许多开发人员以及管理员对部署、弹性伸缩以及管理容器化应用程序等Kubernetes的关键概念都十分熟悉。而对于生产部署而言,Kubernetes的安全性至关重要。因此,了解平台如何管理
副标题[/!--empirenews.page--]

随着Kubernetes被广泛使用,成为业界公认的容器编排管理的标准框架,许多开发人员以及管理员对部署、弹性伸缩以及管理容器化应用程序等Kubernetes的关键概念都十分熟悉。而对于生产部署而言,Kubernetes的安全性至关重要。因此,了解平台如何管理用户和应用程序的身份认证和授权十分必要。

我们将推出一系列文章,以一种实践性的视角来了解平台内部的Kubernetes和Pod外部用户的身份认证和授权。我也会解释如何使用角色以及角色绑定来允许或限制资源访问。

API Server——Kubernetes网关

API为Kubernetes各类资源对象(如节点、标签、Pod、服务、部署、secrets、configmaps以及ingress等)提供访问接口。这些资源对象通过简单的REST API执行基本的CRUD(增删改查)操作。

Kubernetes的核心构建块之一是API Server,它作为Kubernetes的网关,是访问和管理资源对象的唯一入口。内部组件(如kubelet、调度程序和控制器)通过API Server访问API以进行编排和协调。分布式键/值数据库、etcd只能通过API Server访问。

Kubernetes身份认证和授权操作全攻略:K8s 访问控制入门

通常我们可以通过命令行工具kubectl来与API Server进行交互。从kubectl发送的任何内容最终都会被API Server所接收。因此,多个工具和插件会直接或间接地使用相同的API。

即使在Kubernetes集群中访问或者操作对象之前,该请求也需要由API Server进行身份验证。REST路径使用基于X.509证书的TLS协议来保护和加密流量。Kubectl在编码和发送请求之前查找文件〜/ .kube / config以检索CA证书和客户端证书。

  1. apiVersion: v1 
  2. clusters: 
  3. - cluster: 
  4. certificate-authority: /Users/janakiramm/.minikube/ca.crt 
  5. server: https://192.168.99.100:8443 
  6. name: minikube 
  7. contexts: 
  8. - context: 
  9. cluster: minikube 
  10. user: minikube 
  11. name: minikube 
  12. current-context: minikube 
  13. kind: Config 
  14. preferences: {} 
  15. users: 
  16. - name: minikube 
  17. user: 
  18. client-certificate: /Users/janakiramm/.minikube/client.crt 
  19. client-key: /Users/janakiramm/.minikube/client.key 

文件ca.crt表示集群使用的CA证书,文件client.crt和client.key映射到用户minikube。Kubectl使用上下文中的这些证书和密钥对请求进行编码。

我们可以通过curl命令访问API Server吗?答案是肯定的。

即使最常见的操作是通过运行kubectl proxy来使用tunnel协议,我们依然可以通过计算机上的可用证书来访问路径。除了CA证书之外,我们还需要在头部嵌入base64编码的令牌(token)。

如何检索令牌(token)以及从curl调用API的命令如下:

  1. kubectl config view -o jsonpath='{"Cluster nametServern"}{range .clusters[*]}{.name}{"t"}{.clu  
  2. Cluster name Server  
  3. minikube https://192.168.99.100:8443  
  4. export CLUSTER_NAME="minikube"  
  5. APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name=="$CLUSTER_NAME")].cluster.server}") 

接下来,一个重要的任务就是获取与默认service account关联的令牌。无需担心这一实体,我们将在之后的文章中更好地理解它。

  1. TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes.io/service-a 

现在我们拥有调用curl的所有数据了:

  1. curl -X GET  
  2. --cacert ~/.minikube/ca.crt  
  3. --header "Authorization: Bearer $TOKEN"  
  4. $APISERVER/version 

Kubernetes身份认证和授权操作全攻略:K8s 访问控制入门

Kubernetes访问控制的三个层次

如上文所述,用户和Pod在访问或操作对象之前都要由API Server进行身份认证。

当一个有效的请求发送到API Server时,在它被允许或被拒绝之前将经历3个步骤。

Kubernetes身份认证和授权操作全攻略:K8s 访问控制入门

1、 身份认证

一旦TLS连接建立,请求就进入到身份认证阶段,在这一阶段,请求有效负载由一个或多个认证器模块检查。

认证模块时管理员在集群创建过程中配置的,一个集群可能有多个认证模块配置,每个模块会依次尝试认证, 直到其中一个认证成功。

在主流的认证模块中会包括客户端证书、密码、plain tokens、bootstrap tokens以及JWT tokens(用于service account)。客户端证书的使用是默认的并且是最常见的方案。

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!