简介:本文详细介绍了如何在Kubernetes集群中部署Harbor镜像仓库,并配置K8s使用Harbor作为私有镜像源,涵盖部署前准备、Harbor部署、K8s集成配置及安全加固等关键环节。
在容器化部署成为主流的今天,Kubernetes(K8s)作为容器编排的事实标准,其镜像管理效率直接影响集群稳定性。而Harbor作为开源的企业级私有镜像仓库,不仅提供安全的镜像存储,还支持镜像扫描、权限控制等高级功能。将Harbor与K8s集成,能够实现:
harbor.example.com),并配置DNS解析;Harbor支持多种存储驱动:
Harbor官方提供Helm Chart,简化部署流程:
# 添加Harbor Helm仓库
helm repo add harbor https://helm.goharbor.io
# 创建命名空间
kubectl create namespace harbor
# 部署Harbor(示例配置)
helm install harbor harbor/harbor \
--namespace harbor \
--set expose.type=ingress \
--set expose.tls.secretName=harbor-tls \
--set persistence.persistentVolumeClaim.registry.storageClass=nfs-client \
--set harborAdminPassword="Admin@123"
关键参数说明:
expose.type:暴露服务方式(Ingress/NodePort/LoadBalancer);persistence:存储配置,需根据实际环境调整;harborAdminPassword:初始管理员密码(建议部署后修改)。对于需要深度定制的场景,可手动安装:
# 下载Harbor安装包
wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz
tar xvf harbor-offline-installer-v2.7.0.tgz
cd harbor
# 修改harbor.yml配置文件
vim harbor.yml
# 重点配置项:
# hostname: harbor.example.com
# https:
# certificate: /path/to/cert.pem
# private_key: /path/to/key.pem
# storage_driver:
# name: filesystem
# # 或配置S3/Ceph等
# 安装并启动
./install.sh
kubectl get pods -n harbor
# 确保所有Pod状态为Running
https://harbor.example.com,使用默认账号admin登录。
# 生成base64编码的用户名和密码
echo -n "admin" | base64
echo -n "Admin@123" | base64
# 创建Secret YAML
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: harbor-registry-secret
namespace: default
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: eyJhdXRocyI6eyJodHRwczovL2hhcmJvci5leGFtcGxlLmNvbSI6eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJBZG1pbkAxMjMiLCJhdXRoIjoiZmxkY1hKdmMzUmxiV0Z5YzJsdmJqMGlNU0l3SWl3aVpYaHdJam94TkRBM01pST0ifX19
EOF
替代方案:使用kubectl create secret docker-registry命令:
kubectl create secret docker-registry harbor-registry-secret \
--docker-server=harbor.example.com \
--docker-username=admin \
--docker-password=Admin@123 \
--namespace=default
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
imagePullSecrets:
- name: harbor-registry-secret
containers:
- name: nginx
image: harbor.example.com/library/nginx:latest
ports:
- containerPort: 80
若Harbor通过Ingress暴露,需配置注解以支持WebSocket(用于日志推送):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: harbor-ingress
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
spec:
rules:
- host: harbor.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: harbor-core
port:
number: 80
tls:
- hosts:
- harbor.example.com
secretName: harbor-tls
Harbor支持Notary进行镜像签名:
# 在Harbor中启用Notary
# 修改harbor.yml:
# notary:
# enabled: true
# 然后重新运行install.sh
# 客户端配置(需安装notary-client)
export DOCKER_CONTENT_TRUST=1
docker push harbor.example.com/library/nginx:signed
Harbor集成Clair进行漏洞扫描:
core:
resources:
limits:
cpu: 1000m
memory: 1Gi
requests:
cpu: 500m
memory: 512Mi
harbor-core服务状态。通过部署Harbor并与K8s集成,企业能够构建高效的容器镜像管理体系。未来,随着Harbor对多云、AI模型仓库等场景的支持,其价值将进一步凸显。建议读者:
容器化浪潮下,Harbor与K8s的深度集成不仅是技术选择,更是企业数字化基础设施的关键组件。通过本文的实践指南,读者可快速构建安全、高效的镜像管理平台,为业务创新提供坚实支撑。