kubernetes實踐之七:安全機制API Server認證之Service Account Token
Kubernetes有User Account和Service Account兩套獨立的賬號系統。
1.User Account是給人用的,Service Account 是給Pod 裡的程式使用的,面向的物件不同。
2.User Account是全域性性的,Service Account 是屬於某個具體的Namespace
3.User Account是與後端的使用者資料庫同步的。
二:Kubernetes API Server簡介
Kubernetes API Server通過一個名為kube-apiserver的程式提供服務,該程式執行在Master節點上。在預設情況下,kube-apiserver程式在本機的8080埠(--insecure-port)提供REST服務。我們可以同時啟動HTTPS安全埠(--secure=6443)來啟動安全機制,加強REST API訪問的安全性。
通常我們使用kubectl來與Kubernetes API Server互動,它們之間的介面是REST呼叫。也可以使用curl命令列工具進行快速驗證。
另外是通過程式設計的方式呼叫Kubernetes API Server 具體又細分為以下兩種場景:
1. 執行在POD裡的程式呼叫Server
API. Pod中的程式如何指定API
Server的訪問地址呢?答案很簡單,因為Kubernetes API Server本身也是一個Service,它的名字是“kubernetes”,IP地址是ClusterIP地址池裡面的第一個地址。服務埠是HTTPS埠443.
2. 開發基於Kubernetes的管理平臺,比如呼叫Kubernetes API來完成Pod,Service,RC等資源物件的圖形化建立和管理介面。可採用社群中相關的Client Library.
正常情況下,為了確保Kubernetes叢集的安全,API Server都會對客戶端進行身份認證,認證失敗則無法呼叫API。此外,Pod中訪問Kubernetes API Server服務的時候,是以Service方式訪問服務名為kubernetes的這個服務,而kubernetes服務又只在HTTPS 443上提供服務,那麼如何進行身份認證呢? 答案是 Service Account Token.
三: Service Account
如果kubernetes開啟了ServiceAccount(–admission_control=…,ServiceAccount,… )那麼會在每個namespace下面都會建立一個預設的default的ServiceAccount。
每個ServiceAccount下面都會擁有一個加密過的secret作為Token. 該token也叫service-account-token,該token才是真正在API Server驗證(authentication)環節起作用的。
當使用者在該namespace下建立pod的時候都會預設使用這個service account,下面是get pod 擷取的部分,可以看到kubernetes會把預設的service account掛載到容器內。
檢視一下secret的具體內容
上面的內容是經過base64加密過後的。可以看到ca.crt(這個是API Server的CA公鑰證書,用於Pod中的Process對API Server的服務端數字證書進行校驗時使用的),namespace和token被放到了容器內,這樣容器就可以通過https的請求訪問apiserver了。
四:API Server的service account驗證過程
以kube-system namespace下的“default” service account為例,Pod的usrname全稱為:system:serviceaccount:kube-system:default。有了username,那麼credentials呢?就是上面提到的service-account-token中的token。API Server的驗證環節支援多種身份校驗方式:CA 證書認證、Token 認證、Base 認證。一旦API Server發現client發起的request使用的是service account token的方式,API Server就會自動採用signed bearer token方式進行身份校驗。而request就會使用攜帶的service account token參與驗證。該token是API Server在建立service account時用API server啟動引數:–service-account-key-file的值簽署(sign)生成的。如果–service-account-key-file未傳入任何值,那麼將預設使用–tls-private-key-file的值,即API Server的私鑰。
五:
Secret
Kubernetes提供了Secret來處理敏感資訊,目前Secret的型別有3種:
1.Opaque(default): 任意字串
2.kubernetes.io/service-account-token: 作用於ServiceAccount,就是上面說的。
3.kubernetes.io/dockercfg: 作用於Docker
registry,使用者下載docker映象認證使用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2152085/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kubernetes實踐之十四:Service Account與Secret
- kubernetes實踐之四十五:API Server原理分析APIServer
- Android之window機制token驗證Android
- k8s之API Server認證K8SAPIServer
- kubernetes實踐之五十四:垃圾回收機制
- kubernetes實踐之十九:API概述API
- kubernetes實踐之六十五:Service Mesh
- kubernetes實踐之五十:kubelet執行機制分析
- kubernetes實踐之十三: 負載均衡機制Ingress負載
- kubernetes實踐之四十三: Service詳解
- egg基於jsonwebtoken的Token實現認證機制JSONWeb
- kubernetes實踐之五十三:Service中的故障排查
- Kubernetes安裝之六:配置master之api-serverASTAPIServer
- kubernetes實踐之四十八:Service Controller與Endpoint ControllerController
- Kubernetes中Service機制
- Kubernetes: kube-apiserver 之認證APIServer
- kubernetes實踐之五十一:kube-proxy執行機制分析
- REST API簽名認證機制RESTAPI
- Kubernetes Service之ClusterIP
- kubernetes實戰篇之通過api-server訪問dashboardAPIServer
- 6.9找回機制介面安全&驗證碼token介面
- kubernetes實踐之十一:EFK
- springboot+jwt做api的token認證Spring BootJWTAPI
- kubernetes實踐之七十四:Service Mesh Meetup深圳站學習總結
- HDFSRPC安全認證Token篇推廣RPC
- kubernetes實踐之六十:Cabin-Manage Kubernetes
- kubernetes實踐之五十七:PodPreset
- kubernetes實踐之五十八:CronJob
- kubernetes實踐之五十二:Helm
- kubernetes實踐之五十九:NetworkPolicy
- kubernetes實踐之十七:架構架構
- kubernetes實踐之八:TLS bootstrappingTLSbootAPP
- 基於 JWT + Refresh Token 的使用者認證實踐JWT
- kubernetes實踐之五十五:kubectl之配置kubeconfig
- 鴻蒙 Next 安全機制之密碼管理:深度剖析與最佳實踐鴻蒙密碼
- Istio安全-認證(istio 系列七)
- 阿里雲Kubernetes容器服務Istio實踐之整合日誌服務Log Service阿里
- kubernetes實踐之四十二:StatefulSet