Kubernetes—安全 认证

⒈机制说明

 

⒉Authentication

  1.分类

    1.HTTP Token认证:通过一个Token(字符串) 来识别合法用户

    HTTP Token 的认证是用一个很长的特殊编码方式的并且难以被模仿的字符串-Token 来表达客户的一种方式。Token 是一个很长的很复杂的宇符串,每个Token 对应一个用户名存储在 AP| Server能访问的文件中。当客户端发起API调用请求时,需要在 HTTP Header里放入 Token。       2.HTTP Base认证:通过用户名+密码的方式认证       用户名+:+密码 用 BASE64 算法进行编码后的宇符串放在 HTTP Request 中的 HeatherAuthorization域里发送给服务端,服务端收到后进行编码,获取用户名及密码        3.最严格的 HTTPS 证书认证:基于CA根证书签名的客户端身份认证方式        首先签署一个CA根证书,所有节点的证书都是以这个根证书所签发出来的子证书,并且是HTTPS的双向认证。
  2.K8S中需要认证的节点  
              两种类型:       1.Kubenetes 组件对API Server的访问: kubectl、 Controller Manager、Scheduler、 kubelet、kube-proxy       2.Kubernetes 管理的Pod对容器的访问:Pod (dashborad 也是以Pod 形式运行)          安全性说明:       1.Controller Manager、 Scheduler 与 API Server 在同一台机器,所以直接使用API Server 的非安全端口访问,–insecure-bind-address=127.0.0.1,防止不必要的性能消耗       2.kubectl、 kubelet、 kube-proxy访问API Server 就都需要证书进行HTTPS 双向认证          证书颁发:       1.手动签发:通过k8s 集群的跟ca 进行签发HTTPS 证书       2.自动签发:kubelet 首次访问API Server时,使用token 做认证,通过后,Contrller Manager 会为kubelet 生成一个证书,以后的访问都是用证书做认证了     3.kubeconfig   kubeconfig文件包含集群参数 (CA证书、API Server地),客户端参数(上面生成的证书和私钥),集群context信息(集群名称、用户名) Kubenetes 组件通过启动时指定不同的kubeconfig 文件可以切换到不同的集群      4.ServiceAccount   Pod中的容器访问APServer。因为Pod的创建、销毁是动态的,所以要为它手动生成证书就不可行了。   Kubenetes使用了Service Account解决Pod访问API Server的认证问题      5.Secret 与SA的关系   Kubernetes 设计了一种资源对象叫做 Secret,分为两类,一种是用于 ServiceAccount 的service-account token,另一种是用于保存用户自定义保密信息的Opaque.ServiceAccount 中用到包含三个部分: Token、 ca.crt, namespace     token是使用API Server私钥签名的 JWT。用于访问API Server时,Server端认证     ca.crt,根证书。用于Client端验证API Server发送的证书     namespace,标识这个service-account-token的作用域名空间

kubectl get secret --all-namespaces
kubectl describe secret default-token-5gm9r --namespace=kube-system

  默认情况下,每个namespace都会有一个ServiceAccount,如果 Pod 在创建时没有指定ServiceAccount, 就会使用Pod 所属的namespace 的 ServiceAccount      6.总结