Kubernetes私有镜像认证实战-imagePullSecrets与ServiceAccount对比
在Kubernetes集群里,Pod要拉取私有仓库的镜像,认证机制是必须搞懂的基础操作。
今天咱们就聊聊最常用的两种方法:imagePullSecrets
和默认ServiceAccount,从原理到配置再到怎么用好它们。
一、两种认证方式有啥区别?
特性 | imagePullSecrets | 默认ServiceAccount |
---|---|---|
管谁 | 单个Pod自己管 | 整个命名空间一起管 |
怎么配 | 在Pod配置里直接写 | 绑到ServiceAccount上 |
谁优先 | Pod自己的配置最优先 | 没显式配置时才用它 |
啥时候用 | 需要单独控制Pod的权限 | 整个命名空间用同一个凭证 |
安全范围 | 精确到单个Pod | 整个命名空间通用 |
二、imagePullSecrets手把手教程
1. 先创建凭证
# 生成docker仓库的认证凭证
kubectl create secret docker-registry my-reg-secret \
--docker-server=my-registry.com \
--docker-username=admin \
--docker-password=123456 \
--docker-email=admin@example.com
2. 在Pod里指定用哪个凭证
spec:
containers:
- name: myapp
image: my-registry.com/myapp:v1
imagePullSecrets:
- name: my-reg-secret # 直接告诉Pod用哪个凭证
适合场景:
- 这个Pod需要单独访问其他仓库
- 测试环境临时用不同的账号
- 多云环境连不同仓库
三、默认ServiceAccount怎么用?
1. 给命名空间默认账号绑凭证
apiVersion: v1
kind: ServiceAccount
metadata:
name: default # 默认账号
namespace: prod
imagePullSecrets:
- name: global-reg-secret # 绑个全局凭证
2. Pod自动继承凭证
只要Pod没自己指定imagePullSecrets
,就会自动用所在命名空间默认ServiceAccount绑的凭证。
小技巧:
- 用
kubectl describe sa default -n xxxnamespace
看看绑了啥凭证
四、该用哪个?看需求!
- 要单独控制某个Pod → 用
imagePullSecrets
- 整个命名空间用同一个凭证 → 配默认ServiceAccount
- 没显式配置 → 看命名空间默认账号有没有绑凭证
五、在kustomize里怎么用
此处使用的是在Kustomize中配置default sa
的imagePullSecrets
的思路
1. 创建Secret
在base中,创建secret文件,这样能够在多个环境中复用
cat <<EOF > base/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: my-reg-secret
data:
.dockerconfigjson: xxxxxxxxxxxxxx这里面的值,建议先用kubectl create secret docker-registry 生成
type: kubernetes.io/dockerconfigjson
2. 将default sa 纳入到kustomize管理
在kustomize的kustomization.yaml
中,将default sa纳入管理
cat <<EOF > kustomization.yaml
resources:
- default-sa.yaml
在default-sa.yaml
中,配置默认sa
cat <<EOF > default-sa.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: default
在kustomize的kustomization.yaml中,配置patch文件
cat <<EOF > kustomization.yaml
resources:
- default-sa.yaml
patches:
- target:
kind: ServiceAccount
name: default
patch: |-
- op: add
path: /imagePullSecrets
value: []
- op: add
path: /imagePullSecrets/-
value:
name: my-reg-secret
六、总结
这两种方法用好,就能灵活控制Pod拉镜像的权限啦。日常运维中根据团队习惯选最适合的方式就行,关键是要保证安全性和易用性。
评论区