在实际的生产环境中遇到了这样的问题:集群中有大量 k8s 节点,在部署应用时,需要拉取私有仓库(harbor/registry)的私有项目镜像,也就是节点必须 docker login
之后才可以正常拉取到镜像。但是也不可能每个节点都这样去做,或者写脚本把用户密码明文暴露,显然是不合适的
需要将镜像仓库的认证凭据(域名/ip,用户名,密码)保存在 k8s 中
kubectl create secret docker-registry harbor-auth \
--docker-username=admin \
--docker-password=Harbor12345 \
--docker-server=172.16.182.136:30003
# docker-registry harbor-auth: 创建docker-registry类型的secret,用作认证私库的私有项目,harbor-auth自定义secret的名字
# --docker-username=admin:登录harbor用户名
# --docker-password=Harbor12345:用户名密码
# --docker-server=172.16.182.136:30003:harbor ip 或者域名
当使用 yaml 文件创建资源时,要在文件中指定该 secret 就不必每台节点都去 docker login
了。如果有 namespace,记得在创建 secret 时也要写 namespace。
apiVersion: apps/v1
kind: Deployment
metadata:
name: java-demo
labels:
app: java-demo
spec:
replicas: 3
selector:
matchLabels:
app: java-demo
template:
metadata:
labels:
app: java-demo
spec:
imagePullSecrets: # 使用该参数指定创建好的docker-registry的secret name即可
- name: harbor-auth
containers:
- name: java-demo
image: 172.16.182.136:30003/demo/java-demo:1.0
ports:
- containerPort: 8080