随笔 - 378  文章 - 0  评论 - 5  阅读 - 6085

K8s用Secret资源对接Harbor私有仓库

Kubernetes对接Harbor私有仓库:YAML清单创建Secret全指南

在Kubernetes生产环境中,通过YAML清单创建Harbor认证Secret是必备技能。本文将手把手教你如何规范编写配置,并分享5个企业级安全实践。


一、手动编写Secret核心步骤

1. 生成.dockerconfigjson文件

# 基础模板(注意保留格式)
echo '{
  "auths": {
    "harbor.example.com": {
      "username": "robot-account",
      "password": "Thi5Is@Secur3Token"
    }
  }
}' > config.json

# 生成Base64编码值
cat config.json | base64 -w0
# 输出示例:ewogICJhdXRocyI6IHsKICAgICJoYXJib3IuZXhhbXBsZS5jb20iOiB7CiAgICAgICJ1c2VybmFtZSI6ICJyb2JvdC1hY2NvdW50IiwKICAgICAgInBhc3N3b3JkIjogIlRoaTVJc0BTZWN1cjNUb2tlbiIKICAgIH0KICB9Cn0=

2. 编写Secret清单文件

# harbor-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: harbor-prod-creds
  namespace: prod              # 必须与目标命名空间一致
  labels:
    registry: harbor          # 添加标签便于管理
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: ewogICJhdXRocyI6IHsKICAgICJoYXJib3IuZXhhbXBsZS5jb20iOiB7CiAgICAgICJ1c2VybmFtZSI6ICJyb2JvdC1hY2NvdW50IiwKICAgICAgInBhc3N3b3JkIjogIlRoaTVJc0BTZWN1cjNUb2tlbiIKICAgIH0KICB9Cn0=  # 替换为实际编码值

3. 应用并验证配置

# 部署Secret
kubectl apply -f harbor-secret.yaml

# 查看编码内容是否准确
kubectl get secret harbor-prod-creds -o jsonpath='{.data.\.dockerconfigjson}' | base64 -d

# 检查关联的ServiceAccount
kubectl describe serviceaccount default -n prod | grep Image

二、生产环境最佳实践

1. 安全加固方案

  • 禁用明文Secret:使用HashiCorp Vault或Sealed Secrets加密敏感数据
  • RBAC权限控制
    # 限制开发人员查看Secret
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      namespace: prod
    rules:
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["get"]
      resourceNames: ["harbor-prod-creds"]
    
  • Harbor机器人账户:创建只读权限的机器人账户,定期轮换Token

2. 多环境配置策略

# 使用Kustomize管理多环境
base/
├── kustomization.yaml
└── secret.yaml
overlays/
├── dev
   ├── patch-secret.yaml
   └── kustomization.yaml
└── prod
    ├── patch-secret.yaml
    └── kustomization.yaml

3. 证书配置(自签名HTTPS场景)

# 获取Harbor证书
openssl s_client -connect harbor.example.com:443 -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > ca.crt

# 创建证书Secret
kubectl create secret generic harbor-ca-cert --from-file=ca.crt=./ca.crt -n prod

# 在节点全局配置证书
sudo mkdir -p /etc/docker/certs.d/harbor.example.com
sudo cp ca.crt /etc/docker/certs.d/harbor.example.com/ca.crt

三、7大常见错误排查

  1. Base64编码错误

    # 验证编码的正确性
    echo "BASE64_STRING" | base64 -d | jq
    
  2. 镜像地址格式错误
    ✅ 正确格式:harbor.example.com/project/image:tag
    ❌ 常见错误:缺少项目名、端口号错误、标签缺失

  3. 跨命名空间访问

    # 每个namespace都需要独立创建Secret
    kubectl create secret ... -n dev
    kubectl create secret ... -n prod
    
  4. 证书验证失败

    # 在Pod内验证证书
    kubectl run -it --rm debug --image=nicolaka/netshoot -- curl -vk https://harbor.example.com
    
  5. 权限不足

    # 检查Harbor项目权限
    kubectl create secret docker-registry test-creds --docker-server=harbor.example.com --docker-username=test
    kubectl run test --image=harbor.example.com/project/private-image -it --rm --restart=Never
    
  6. Secret未关联到ServiceAccount

    # 正确关联方式
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: ci-robot
    imagePullSecrets:
    - name: harbor-prod-creds
    
  7. Harbor磁盘空间不足

    # 检查Harbor存储状态
    df -h /data/harbor
    

四、完整生产示例

# deployment-with-secret.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-service
  namespace: prod
spec:
  replicas: 3
  selector:
    matchLabels:
      app: order-service
  template:
    metadata:
      labels:
        app: order-service
    spec:
      serviceAccountName: order-service-account  # 使用专用SA
      containers:
      - name: app
        image: harbor.example.com/prod/order-service:v1.8.3
        imagePullPolicy: IfNotPresent
      imagePullSecrets:
      - name: harbor-prod-creds

---
# serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: order-service-account
  namespace: prod
imagePullSecrets:
- name: harbor-prod-creds

终极建议

  • 使用基础设施即代码(IaC)工具管理Secret
  • 定期执行kubectl audit检查Secret访问记录
  • 结合ArgoCD实现配置漂移检测
  • 重要环境配置双人复核机制

通过规范的YAML清单管理Harbor认证信息,既能保障安全性,又能实现配置的版本控制与审计追踪。记住:在Kubernetes中,Secret的明文只是第一道防线,真正的安全需要从架构设计开始!

posted on   Leo-Yide  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示