新聞中心
PKI 證書和要求
Kubernetes 需要 PKI 證書才能進行基于 TLS 的身份驗證。如果你是使用 kubeadm 安裝的 Kubernetes, 則會自動生成集群所需的證書。你還可以生成自己的證書。 例如,不將私鑰存儲在 API 服務(wù)器上,可以讓私鑰更加安全。此頁面說明了集群必需的證書。

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計、成都做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出尼瑪免費做網(wǎng)站回饋大家。
集群是如何使用證書的
Kubernetes 需要 PKI 才能執(zhí)行以下操作:
- Kubelet 的客戶端證書,用于 API 服務(wù)器身份驗證
- Kubelet 服務(wù)端證書, 用于 API 服務(wù)器與 Kubelet 的會話
- API 服務(wù)器端點的證書
- 集群管理員的客戶端證書,用于 API 服務(wù)器身份認(rèn)證
- API 服務(wù)器的客戶端證書,用于和 Kubelet 的會話
- API 服務(wù)器的客戶端證書,用于和 etcd 的會話
- 控制器管理器的客戶端證書/kubeconfig,用于和 API 服務(wù)器的會話
- 調(diào)度器的客戶端證書/kubeconfig,用于和 API 服務(wù)器的會話
- 前端代理 的客戶端及服務(wù)端證書
Note: 只有當(dāng)你運行 kube-proxy 并要支持 擴展 API 服務(wù)器 時,才需要 ?
front-proxy? 證書
etcd 還實現(xiàn)了雙向 TLS 來對客戶端和對其他對等節(jié)點進行身份驗證。
證書存放的位置
假如通過 kubeadm 安裝 Kubernetes,大多數(shù)證書都存儲在 ?/etc/kubernetes/pki?。 本文檔中的所有路徑都是相對于該目錄的,但用戶賬戶證書除外,kubeadm 將其放在 ?/etc/kubernetes? 中。
手動配置證書
如果你不想通過 kubeadm 生成這些必需的證書,你可以使用一個單一的根 CA 來創(chuàng)建這些證書或者直接提供所有證書。
單根 CA
你可以創(chuàng)建一個單根 CA,由管理員控制器它。該根 CA 可以創(chuàng)建多個中間 CA,并將所有進一步的創(chuàng)建委托給 Kubernetes。
需要這些 CA:
| 路徑 | 默認(rèn) CN | 描述 |
|---|---|---|
| ca.crt,key | kubernetes-ca | Kubernetes 通用 CA |
| etcd/ca.crt,key | etcd-ca | 與 etcd 相關(guān)的所有功能 |
| front-proxy-ca.crt,key | kubernetes-front-proxy-ca | 用于 前端代理 |
上面的 CA 之外,還需要獲取用于服務(wù)賬戶管理的密鑰對,也就是 ?sa.key? 和 ?sa.pub?。
下面的例子說明了上表中所示的 CA 密鑰和證書文件。
/etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/ca.key
/etc/kubernetes/pki/etcd/ca.crt
/etc/kubernetes/pki/etcd/ca.key
/etc/kubernetes/pki/front-proxy-ca.crt
/etc/kubernetes/pki/front-proxy-ca.key
所有的證書
如果你不想將 CA 的私鑰拷貝至你的集群中,你也可以自己生成全部的證書。
需要這些證書:
| 默認(rèn) CN | 父級 CA | O (位于 Subject 中) | 類型 | 主機 (SAN) |
|---|---|---|---|---|
| kube-etcd | etcd-ca | server, client | , , localhost, 127.0.0.1 |
|
| kube-etcd-peer | etcd-ca | server, client | , , localhost, 127.0.0.1 |
|
| kube-etcd-healthcheck-client | etcd-ca | client | ||
| kube-apiserver-etcd-client | etcd-ca | system:masters | client | |
| kube-apiserver | kubernetes-ca | server | , , , [1] |
|
| kube-apiserver-kubelet-client | kubernetes-ca | system:masters | client | |
| front-proxy-client | kubernetes-front-proxy-ca | client |
[1]: 用來連接到集群的不同 IP 或 DNS 名 (就像 kubeadm 為負載均衡所使用的固定 IP 或 DNS 名,?kubernetes?、?kubernetes.default?、?kubernetes.default.svc?、 ?kubernetes.default.svc.cluster?、?kubernetes.default.svc.cluster.local?)。
其中,?kind ?對應(yīng)一種或多種類型的 x509 密鑰用途:
| kind | 密鑰用途 |
|---|---|
| server | 數(shù)字簽名、密鑰加密、服務(wù)端認(rèn)證 |
| client | 數(shù)字簽名、密鑰加密、客戶端認(rèn)證 |
Note:
上面列出的 Hosts/SAN 是推薦的配置方式;如果需要特殊安裝,則可以在所有服務(wù)器證書上添加其他 SAN。
Note:
對于 kubeadm 用戶:
- 不使用私鑰,將證書復(fù)制到集群 CA 的方案,在 kubeadm 文檔中將這種方案稱為外部 CA。
- 如果將以上列表與 kubeadm 生成的 PKI 進行比較,你會注意到,如果使用外部 etcd,則不會生成 ?
kube-etcd?、?kube-etcd-peer? 和 ?kube-etcd-healthcheck-client? 證書。
證書路徑
證書應(yīng)放置在建議的路徑中(以便 kubeadm 使用)。無論使用什么位置,都應(yīng)使用給定的參數(shù)指定路徑。
| 默認(rèn) CN | 建議的密鑰路徑 | 建議的證書路徑 | 命令 | 密鑰參數(shù) | 證書參數(shù) |
|---|---|---|---|---|---|
| etcd-ca | etcd/ca.key | etcd/ca.crt | kube-apiserver | --etcd-cafile | |
| kube-apiserver-etcd-client | apiserver-etcd-client.key | apiserver-etcd-client.crt | kube-apiserver | --etcd-keyfile | --etcd-certfile |
| kubernetes-ca | ca.key | ca.crt | kube-apiserver | --client-ca-file | |
| kubernetes-ca | ca.key | ca.crt | kube-controller-manager | --cluster-signing-key-file | --client-ca-file, --root-ca-file, --cluster-signing-cert-file |
| kube-apiserver | apiserver.key | apiserver.crt | kube-apiserver | --tls-private-key-file | --tls-cert-file |
| kube-apiserver-kubelet-client | apiserver-kubelet-client.key | apiserver-kubelet-client.crt | kube-apiserver | --kubelet-client-key | --kubelet-client-certificate |
| front-proxy-ca | front-proxy-ca.key | front-proxy-ca.crt | kube-apiserver | --requestheader-client-ca-file | |
| front-proxy-ca | front-proxy-ca.key | front-proxy-ca.crt | kube-controller-manager | --requestheader-client-ca-file | |
| front-proxy-client | front-proxy-client.key | front-proxy-client.crt | kube-apiserver | --proxy-client-key-file | --proxy-client-cert-file |
| etcd-ca | etcd/ca.key | etcd/ca.crt | etcd | --trusted-ca-file, --peer-trusted-ca-file | |
| kube-etcd | etcd/server.key | etcd/server.crt | etcd | --key-file | --cert-file |
| kube-etcd-peer | etcd/peer.key | etcd/peer.crt | etcd | --peer-key-file | --peer-cert-file |
| etcd-ca | etcd/ca.crt | etcdctl | --cacert | ||
| kube-etcd-healthcheck-client | etcd/healthcheck-client.key | etcd/healthcheck-client.crt | etcdctl | --key | --cert |
注意事項同樣適用于服務(wù)帳戶密鑰對:
| 私鑰路徑 | 公鑰路徑 | 命令 | 參數(shù) |
|---|---|---|---|
| sa.key | kube-controller-manager | --service-account-private-key-file | |
| sa.pub | kube-apiserver | --service-account-key-file |
下面的例子展示了自行生成所有密鑰和證書時所需要提供的文件路徑。 這些路徑基于前面的表格。
/etc/kubernetes/pki/etcd/ca.key
/etc/kubernetes/pki/etcd/ca.crt
/etc/kubernetes/pki/apiserver-etcd-client.key
/etc/kubernetes/pki/apiserver-etcd-client.crt
/etc/kubernetes/pki/ca.key
/etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/apiserver.key
/etc/kubernetes/pki/apiserver.crt
/etc/kubernetes/pki/apiserver-kubelet-client.key
/etc/kubernetes/pki/apiserver-kubelet-client.crt
/etc/kubernetes/pki/front-proxy-ca.key
/etc/kubernetes/pki/front-proxy-ca.crt
/etc/kubernetes/pki/front-proxy-client.key
/etc/kubernetes/pki/front-proxy-client.crt
/etc/kubernetes/pki/etcd/server.key
/etc/kubernetes/pki/etcd/server.crt
/etc/kubernetes/pki/etcd/peer.key
/etc/kubernetes/pki/etcd/peer.crt
/etc/kubernetes/pki/etcd/healthcheck-client.key
/etc/kubernetes/pki/etcd/healthcheck-client.crt
/etc/kubernetes/pki/sa.key
/etc/kubernetes/pki/sa.pub
為用戶帳戶配置證書
你必須手動配置以下管理員帳戶和服務(wù)帳戶:
| 文件名 | 憑據(jù)名稱 | 默認(rèn) CN | O (位于 Subject 中) |
|---|---|---|---|
| admin.conf | default-admin | kubernetes-admin | system:masters |
| kubelet.conf | default-auth | system:node: (參閱注釋) |
system:nodes |
| controller-manager.conf | default-controller-manager | system:kube-controller-manager | |
| scheduler.conf | default-scheduler | system:kube-scheduler |
Note: ?
kubelet.conf? 中 ?? 的值 必須 與 kubelet 向 apiserver 注冊時提供的節(jié)點名稱的值完全匹配。
- 對于每個配置,請都使用給定的 CN 和 O 生成 x509 證書/密鑰偶對。
- 為每個配置運行下面的 ?
kubectl?命令:
KUBECONFIG= kubectl config set-cluster default-cluster --server=https://:6443 --certificate-authority --embed-certs
KUBECONFIG= kubectl config set-credentials --client-key .pem --client-certificate .pem --embed-certs
KUBECONFIG= kubectl config set-context default-system --cluster default-cluster --user
KUBECONFIG= kubectl config use-context default-system
這些文件用途如下:
| 文件名 | 命令 | 說明 |
|---|---|---|
| admin.conf | kubectl | 配置集群的管理員 |
| kubelet.conf | kubelet | 集群中的每個節(jié)點都需要一份 |
| controller-manager.conf | kube-controller-manager | 必需添加到 manifests/kube-controller-manager.yaml 清單中 |
| scheduler.conf | kube-scheduler | 必需添加到 manifests/kube-scheduler.yaml 清單中 |
下面是前表中所列文件的完整路徑。
/etc/kubernetes/admin.conf
/etc/kubernetes/kubelet.conf
/etc/kubernetes/controller-manager.conf
/etc/kubernetes/scheduler.conf
文章標(biāo)題:創(chuàng)新互聯(lián)kubernetes教程:KubernetesPKI證書和要求
本文來源:http://m.5511xx.com/article/dpcjcod.html


咨詢
建站咨詢
