k8s的imagePullSecrets如何生成及使用

本文详细介绍了如何在Kubernetes集群中创建和使用secret,以便对私有Docker镜像库进行安全认证,包括生成config.json文件、创建harborsecret并应用到deployment yaml中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

公司的docker仓库(harbor),是私有的,需要用户认证之后,才能拉取镜像。

二、生成secret

登录docker

登录到k8s master节点,先登录docker

root@k8s-master:~# docker login 192.168.10.122 -u admin -p Harbor12345
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.10.122/v2/: dial tcp 192.168.10.122:443: connect: connection refused

注意:出现这个报错,是由于harbor为了安全性考虑,默认是需要https证书支持的

但是我们可以通过一个简单的办法解决

修改 /etc/docker/daemon.json 文件

vim /etc/docker/daemon.json

内容如下:

{"insecure-registries": ["192.168.10.122"]}

重新加载docker配置

/etc/init.d/docker reload

再次登录

root@k8s-master:~# docker login 192.168.10.122 -u admin -p Harbor12345
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded

提示登录成功。

登录过程创建或更新一个包含授权令牌的config.json文件。 查看config.json文件:

cat ~/.docker/config.json

输出包含类似以下内容的部分:

{
    "auths": {
        "192.168.10.122": {
            "auth": "YWRtaW46SGFyYm9yMTIzNDU="
        }
    },
    "HttpHeaders": {
        "User-Agent": "Docker-Client/19.03.1 (linux)"
    }
}

注意:如果您使用Docker凭据存储,您将看不到该auth条目,而是看到一个以存储名称为值的credsstore条目。

基于现有Docker凭据创建secret

kubernetes集群使用docker注册表类型的秘密对容器注册表进行身份验证,以获取私有映像。

如果您已经运行了Docker登录,则可以将该凭证复制到Kubernetes中:

kubectl create secret generic harborsecret \
    --from-file=.dockerconfigjson=/root/.docker/config.json \
    --type=kubernetes.io/dockerconfigjson

注意:主要修改红色部分。

harborsecret 表示key名

/root/.docker/config.json 表示docker认证文件,注意要写绝对路径。

查看内容

kubectl get secrets harborsecret --output="jsonpath={.data.\.dockerconfigjson}" | base64 -d

输出:

{
    "auths": {
        "192.168.10.122": {
            "auth": "YWRtaW46SGFyYm9yMTIzNDU="
        }
    },
    "HttpHeaders": {
        "User-Agent": "Docker-Client/19.03.1 (linux)"
    }
}

要了解刚刚创建的regcred秘密的内容,请从以yaml格式查看秘密开始:

kubectl get secret harborsecret --output=yaml

输出:

apiVersion: v1
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjEwLjEyMiI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy4xIChsaW51eCkiCgl9Cn0=
kind: Secret
metadata:
  creationTimestamp: "2019-08-30T06:14:10Z"
  name: harborsecret
  namespace: default
  resourceVersion: "6128"
  selfLink: /api/v1/namespaces/default/secrets/harborsecret
  uid: 76e16e61-a6b9-4a47-a842-e884cf6f468d
type: kubernetes.io/dockerconfigjson

三、在demployment yaml文件中的使用示例

... 
spec:
      imagePullSecrets:
      - name:harborsecret
      containers:
      - name: eureka
        image: 192.168.10.122/library/alpine:latest
...

复制

如果需要删除secret,使用命令

kubectl delete secrets harborsecret

本文参考链接:

Pull an Image from a Private Registry | Kubernetes

https://www.cnblogs.com/aguncn/p/9789320.html

### 如何配置 Kubernetes 使用 Harbor 私有镜像仓库 为了使 Kubernetes 能够从 Harbor 私有镜像仓库中拉取容器镜像,需要完成以下几个方面的配置: #### 1. 创建 Docker 凭据 首先,在本地创建一个用于访问 Harbor 的 `docker-registry` 类型 Secret。这个 Secret 将存储登录 Harbor 所需的用户名和密码。 可以通过以下命令生成 Secret: ```bash kubectl create secret docker-registry regcred \ --namespace=<目标命名空间> \ --docker-server=<Harbor服务器地址> \ --docker-username=<Harbor用户名> \ --docker-password=<Harbor密码> ``` 其中 `<Harbor服务器地址>` 是 Harbor 提供的服务 URL,例如 `https://harbor.example.com`[^1]。 #### 2. 编写 Pod 或 Deployment 配置文件 在定义 Kubernetes 工作负载(如 Pod 或 Deployment)时,需要指定使用的私有镜像以及对应的 ImagePullSecrets 字段来关联之前创建的 Secret。 下面是一个完整的 Pod 配置示例: ```yaml apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: harbor.example.com/<项目名称>/<镜像名称>:<标签> ports: - containerPort: 80 imagePullSecrets: - name: regcred ``` 在这个例子中,`imagePullSecrets` 字段指向了名为 `regcred` 的 Secret,该 Secret 包含了访问 Harbor 的认证信息[^4]。 #### 3. 测试镜像拉取与服务部署 一旦完成了上述配置,可以尝试启动工作负载以验证是否可以从 Harbor 正常拉取镜像并运行容器。如果一切正常,则说明配置成功;如果有错误发生,请检查日志输出中的具体原因,通常可能是由于权限不足或网络连接问题引起[^5]。 --- ### 注意事项 - **安全性考虑**:建议定期更新 Harbor 用户账号密码,并重新同步至 Kubernetes 中的相关 Secrets。 - **性能优化**:对于大规模生产环境下的频繁镜像分发需求,可评估引入缓存机制或其他加速策略来降低源站压力。 - **合规性审查**:利用 Harbor 自带的安全扫描特性对入库镜像进行全面检测,确保其符合企业内部标准及外部法规要求[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值