Kubernetes從私有鏡像倉(cāng)庫(kù)拉取容器鏡像時(shí)的身份驗(yàn)證方式
Kubernetes從私有鏡像倉(cāng)庫(kù)拉取容器鏡像時(shí)的身份驗(yàn)證
1.訪(fǎng)問(wèn)私有鏡像倉(cāng)庫(kù)
當(dāng)你的Docker鏡像存儲(chǔ)在私有鏡像倉(cāng)庫(kù)(如私有Docker Hub、Harbor、ACR、ECR等)時(shí),需要憑據(jù)才能拉取鏡像。
當(dāng)Pod被調(diào)度到某個(gè)節(jié)點(diǎn)上時(shí),kubelet會(huì)嘗試?yán)od中指定的鏡像。如果鏡像位于私有倉(cāng)庫(kù),kubelet就會(huì)使用private-registry-auth這個(gè)Secret中的憑證去拉取。
注意:如果Pod中指定了多個(gè)鏡像,且來(lái)自不同的私有倉(cāng)庫(kù),那么可能需要多個(gè)imagePullSecret,每個(gè)對(duì)應(yīng)一個(gè)倉(cāng)庫(kù)。或者,也可以創(chuàng)建一個(gè)包含多個(gè)倉(cāng)庫(kù)憑證的Secret(但一個(gè)Secret通常只對(duì)應(yīng)一個(gè)倉(cāng)庫(kù))。
另外,除了在Pod級(jí)別指定imagePullSecrets,還可以在ServiceAccount級(jí)別指定,這樣所有使用該ServiceAccount的Pod都會(huì)自動(dòng)使用這些imagePullSecrets,避免了在每個(gè)Pod中重復(fù)配置。
2.提供認(rèn)證憑據(jù)
private-registry-auth 是一個(gè)提前創(chuàng)建的Secret對(duì)象,包含:
- 用戶(hù)名和密碼
- 或Docker配置JSON文件
- 或訪(fǎng)問(wèn)令牌
創(chuàng)建對(duì)應(yīng)的Secret
需要提前創(chuàng)建這個(gè)Secret:
# 方法1:使用用戶(hù)名密碼創(chuàng)建 kubectl create secret docker-registry private-registry-auth \ --docker-server=<registry-url> \ --docker-username=<username> \ --docker-password=<password> \ --docker-email=<email> # 方法2:使用已有的docker config文件 kubectl create secret generic private-registry-auth \ --from-file=.dockerconfigjson=/path/to/.docker/config.json \ --type=kubernetes.io/dockerconfigjson
使用場(chǎng)景示例
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
template:
spec:
imagePullSecrets:
- name: private-registry-auth # 引用之前創(chuàng)建的Secret
containers:
- name: app
image: private-registry.example.com/mycompany/app:v1.0 # 私有鏡像工作原理
- Pod創(chuàng)建時(shí):kubelet從私有倉(cāng)庫(kù)拉取鏡像
- 身份驗(yàn)證:使用
imagePullSecrets中的憑據(jù)進(jìn)行認(rèn)證 - 鏡像拉取:認(rèn)證成功后拉取鏡像到節(jié)點(diǎn)
最佳實(shí)踐
yaml
# 可以將imagePullSecrets綁定到ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
name: default
imagePullSecrets:
- name: private-registry-auth # 所有使用這個(gè)SA的Pod都會(huì)自動(dòng)繼承
# 然后在Pod中引用這個(gè)ServiceAccount
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
serviceAccountName: default # 自動(dòng)獲得imagePullSecrets
containers:
- name: app
image: private.registry/app:v1替代方案比較
| 方式 | 優(yōu)點(diǎn) | 缺點(diǎn) |
|---|---|---|
| Pod級(jí)imagePullSecrets | 靈活,不同Pod可用不同憑據(jù) | 每個(gè)Pod都要配置 |
| ServiceAccount級(jí) | 統(tǒng)一管理,減少重復(fù)配置 | 所有使用該SA的Pod共享憑據(jù) |
| 節(jié)點(diǎn)級(jí)配置 | 在節(jié)點(diǎn)docker daemon配置 | 不推薦,安全性差 |
這個(gè)配置是現(xiàn)代Kubernetes安全實(shí)踐中保護(hù)私有鏡像訪(fǎng)問(wèn)的重要部分。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Containerd容器運(yùn)行yum安裝與二進(jìn)制安裝
這篇文章主要為大家介紹了Containerd容器運(yùn)行yum安裝與二進(jìn)制安裝,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
某集團(tuán)任意文件下載到虛擬主機(jī)getshell的方法
這篇文章主要介紹了某集團(tuán)任意文件下載到虛擬主機(jī)getshell的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01

