在 Kubernetes (K8S) 中免密拉取 Harbor 镜像是一个非常常见的操作,Harbor 是一个开源的企业级镜像仓库,有时候我们需要在 Kubernetes 集群中使用 Harbor 中的镜像,而不想在每个节点上都配置密码。本文将向你介绍如何在 Kubernetes 中实现免密拉取 Harbor 镜像。

## 流程概述

下面展示了实现K8S免密拉取Harbor镜像的详细流程步骤:

| 步骤 | 操作 |
| ---- | ---- |
| 1 | 创建 Secret |
| 2 | 创建 ServiceAccount |
| 3 | 将 Secret 和 ServiceAccount 绑定 |
| 4 | 将 ServiceAccount 绑定到 Pod |

## 具体操作步骤

### 步骤 1:创建 Secret

首先我们需要在 Kubernetes 中创建一个 Secret,用于保存 Harbor 的访问凭证。在命令行中执行以下命令:

```bash
kubectl create secret docker-registry harbor-secret \
--docker-server=HARBOR_REGISTRY_URL \
--docker-username=YOUR_USERNAME \
--docker-password=YOUR_PASSWORD \
--docker-email=YOUR_EMAIL
```

这里需要将 `HARBOR_REGISTRY_URL` 替换为你的 Harbor 镜像仓库地址,`YOUR_USERNAME` 替换为你的用户名,`YOUR_PASSWORD` 替换为你的密码,`YOUR_EMAIL` 替换为你的邮箱。

### 步骤 2:创建 ServiceAccount

接下来我们需要创建一个 ServiceAccount,用于在 Kubernetes 中关联我们刚刚创建的 Secret。在命令行中执行以下命令:

```bash
kubectl create serviceaccount harbor-sa
```

### 步骤 3:将 Secret 和 ServiceAccount 绑定

将刚刚创建的 Secret 和 ServiceAccount 进行绑定,确保 ServiceAccount 可以使用 Secret 中的凭证。执行以下命令:

```bash
kubectl patch serviceaccount harbor-sa -p '{"imagePullSecrets": [{"name": "harbor-secret"}]}'
```

### 步骤 4:将 ServiceAccount 绑定到 Pod

最后一步,我们需要将创建的 ServiceAccount 绑定到需要使用 Harbor 镜像的 Pod 上。在 Pod 的配置文件中添加以下内容:

```yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: HARBOR_REGISTRY_URL/IMAGE_NAME:TAG
serviceAccountName: harbor-sa
```

确保将 `HARBOR_REGISTRY_URL` 替换为你的 Harbor 镜像仓库地址,`IMAGE_NAME` 替换为你的镜像名称,`TAG` 替换为你的镜像标签。

经过以上步骤,你就可以在 Kubernetes 中实现免密拉取 Harbor 镜像的操作了。这样可以确保在使用 Harbor 镜像时不需要在每个节点上都配置密码,提高了安全性和便捷性。

希望本篇文章对你有所帮助,如果有任何问题,欢迎留言讨论。祝你在Kubernetes的学习和应用中取得成功!