在实际的生产环境中遇到了这样的问题:集群中有大量 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

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0