網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
imagePullSecrets 簡(jiǎn)介
Kubernetes 在每個(gè) Pod 或每個(gè) Namespace 的基礎(chǔ)上使用 imagePullSecrets 對(duì)私有容器注冊(cè)表進(jìn)行身份驗(yàn)證。要做到這一點(diǎn),你需要?jiǎng)?chuàng)建一個(gè)秘密與憑據(jù):
{% note warning %} ?? 警告:
現(xiàn)在隨著公共鏡像倉(cāng)庫(kù)(如:docker.io 等)開(kāi)始對(duì)匿名用戶(hù)進(jìn)行限流,配置公共倉(cāng)庫(kù)的身份認(rèn)證也變得有必要。 {% endnote %}
kubectl create secret docker-registry image-pull-secret \ -n <your-namespace> \ --docker-server=<your-registry-server> \ --docker-username=<your-name> \ --docker-password=<your-password> \ --docker-email=<your-email>
例如配置 docker.io 的 pull secret:
kubectl create secret docker-registry image-pull-secret-src \ -n imagepullsecret-patcher \ --docker-server=docker.io \ --docker-username=caseycui \ --docker-password=c874d654-xxxx-40c6-xxxx-xxxxxxxx89c2 \ --docker-email=cuikaidong@foxmail.com
{% note info %} ?? 信息:
如果 docker.io 啟用了「2 階段認(rèn)證」,可能需要?jiǎng)?chuàng)建 Access Token(對(duì)應(yīng)上面的 docker-password
,創(chuàng)建鏈接在這里:賬號(hào) -> 安全 {% endnote %}
現(xiàn)在我們可以在一個(gè) pod 中使用這個(gè) secret 來(lái)下載 docker 鏡像:
apiVersion: v1 kind: Pod metadata: name: busybox namespace: private-registry-test spec: containers: - name: my-app image: my-private-registry.infra/busybox:v1 imagePullSecrets: - name: image-pull-secret
另一種方法是將它添加到命名空間的默認(rèn) ServiceAccount 中:
kubectl patch serviceaccount default \ -p "{\"imagePullSecrets\": [{\"name\": \"image-pull-secret\"}]}" \ -n <your-namespace>
在 K8S 集群范圍使用 imagePullSecrets
我找到了一個(gè)叫做 imagepullsecret-patch 的工具,它可以在你所有的命名空間上做這個(gè):
wget https://raw.githubusercontent.com/titansoft-pte-ltd/imagepullsecret-patcher/185aec934bd01fa9b6ade2c44624e5f2023e2784/deploy-example/kubernetes-manifest/1_rbac.yaml wget https://raw.githubusercontent.com/titansoft-pte-ltd/imagepullsecret-patcher/master/deploy-example/kubernetes-manifest/2_deployment.yaml kubectl create ns imagepullsecret-patcher
編輯下載的文件,一般需要修改image-pull-secret-src
的內(nèi)容,這個(gè) pull secret 就會(huì)應(yīng)用到 K8S 集群范圍。
nano 1_rbac.yaml nano 2_deployment.yaml kubectl apply -f 1_rbac.yaml kubectl apply -f 2_deployment.yaml
這里背后創(chuàng)建的資源有:
NameSpace
RBAC 權(quán)限相關(guān):
imagepullsecret-patcher
ServiceAccount
imagepullsecret-patcher
ClusterRole,具有對(duì) service account 和 secret 的所有權(quán)限
imagepullsecret-patcher
ClusterRoleBinding,為 imagepullsecret-patcher
ServiceAccount 賦予 imagepullsecret-patcher
ClusterRole 的權(quán)限。
- 全局 pull secret
image-pull-secret-src
,里面是你的 K8S 全局包含的所有的鏡像庫(kù)地址和認(rèn)證信息。 - Deployment
imagepullsecret-patcher
,指定 ServiceAccount 是imagepullsecret-patcher
就有了操作 service account 和 secret 的所有權(quán)限,并將上面的 secret 掛載到 Deployment pod 內(nèi)。
可以包含多個(gè)鏡像庫(kù)地址和認(rèn)證信息,如:
{ "auths": { "docker.io": { "username": "caseycui", "password": "c874xxxxxxxxxxxxxxxx1f89c2", "email": "cuikaidong@foxmail.com", "auth": "Y2FzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxWMy" }, "quay.io": { "auth": "ZWFzdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxlXWmpNPQ==", "email": "" } } }
base64 編碼后寫(xiě)到 secret 的 .dockerconfigjson
字段即可:
apiVersion: v1 kind: Secret metadata: name: image-pull-secret-src namespace: imagepullsecret-patcher data: .dockerconfigjson: >- eyJhdXRocyI6eyJkb2NrZXIuaW8iOnsidXNlcm5hbWUiOiJjYXNleWN1aSIsInB.............................................IiwiZW1haWwiOiIifX19 type: kubernetes.io/dockerconfigjson
啟動(dòng)后的 pod 會(huì)在所有 NameSpace 下創(chuàng)建 image-pull-secret
secret(內(nèi)容來(lái)自于image-pull-secret-src
) 并把它 patch 到 default
service account 及該 K8S 集群的所有 ServiceAccount 里,日志如下:
time="2022-01-12T16:07:30Z" level=info msg="Application started" time="2022-01-12T16:07:30Z" level=info msg="[default] Created secret" time="2022-01-12T16:07:30Z" level=info msg="[default] Patched imagePullSecrets to service account [default]" time="2022-01-12T16:07:30Z" level=info msg="[kube-system] Created secret" time="2022-01-12T16:07:31Z" level=info msg="[kube-system] Patched imagePullSecrets to service account [node-controller]" ... time="2022-01-12T16:07:37Z" level=info msg="[kube-public] Created secret" time="2022-01-12T16:07:37Z" level=info msg="[kube-public] Patched imagePullSecrets to service account [default]" time="2022-01-12T16:07:38Z" level=info msg="[kube-node-lease] Created secret" time="2022-01-12T16:07:38Z" level=info msg="[kube-node-lease] Patched imagePullSecrets to service account [default]" time="2022-01-12T16:07:38Z" level=info msg="[prometheus] Created secret" time="2022-01-12T16:07:39Z" level=info msg="[prometheus] Patched imagePullSecrets to service account [default]" ... time="2022-01-12T16:07:41Z" level=info msg="[imagepullsecret-patcher] Created secret" time="2022-01-12T16:07:41Z" level=info msg="[imagepullsecret-patcher] Patched imagePullSecrets to service account [default]" time="2022-01-12T16:07:41Z" level=info msg="[imagepullsecret-patcher] Patched imagePullSecrets to service account [imagepullsecret-patcher]"
今后我們只需要更新 image-pull-secret-src
這一個(gè)即可了。?????????
Kyverno policy
Kyverno policy 可以實(shí)現(xiàn)同樣的效果:
apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: sync-secret spec: background: false rules: - name: sync-image-pull-secret match: resources: kinds: - Namespace generate: kind: Secret name: image-pull-secret namespace: "{{request.object.metadata.name}}" synchronize: true clone: namespace: default name: image-pull-secret --- apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: mutate-imagepullsecret spec: rules: - name: mutate-imagepullsecret match: resources: kinds: - Pod mutate: patchStrategicMerge: spec: imagePullSecrets: - name: image-pull-secret ## imagePullSecret that you created with docker hub pro account (containers): - (image): "*" ## match all container images
原文鏈接:https://juejin.cn/post/7171252084614889480
相關(guān)推薦
- 2021-12-16 方案缺陷-HAProxy + Sentinel +redis
- 2022-09-29 C++模板的特化超詳細(xì)精講_C 語(yǔ)言
- 2021-11-12 C語(yǔ)言打印某一年中某月的日歷_C 語(yǔ)言
- 2022-10-15 Go?Excelize?API源碼閱讀GetPageLayout及SetPageMargins_Go
- 2022-06-15 ASP.NET?MVC使用區(qū)域(Area)功能_基礎(chǔ)應(yīng)用
- 2023-01-12 python如何批量讀取.mat文件并保存成.npy_python
- 2022-11-05 Android實(shí)現(xiàn)折線圖小工具_(dá)Android
- 2022-04-24 Redis?整數(shù)集合的具體使用(intset)_Redis
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支