在完成基础集群搭建的基础上,本文新增代码仓库(Gitea)与镜像仓库(Harbor)的集成部署指南,实现完整的 DevOps 工具链闭环。
🧩 一、前置要求补充
1.1 安装 Ingress 控制器
| 12
 3
 4
 5
 
 | # 安装 Nginx Ingress(需在 Master 节点执行)kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml
 
 # 验证安装状态
 kubectl get pods -n ingress-nginx
 
 | 
1.2 创建共享存储目录(所有节点)
| 12
 
 | sudo mkdir -p /opt/k8s-data/{gitea,harbor}sudo chmod 777 /opt/k8s-data/{gitea,harbor}  # 测试环境简化权限
 
 | 
📦 二、集成 Gitea 代码仓库
2.1 创建 PostgreSQL 数据库(依赖 Helm 3)
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | # 添加 Bitnami 仓库helm repo add bitnami https://charts.bitnami.com/bitnami
 helm repo update
 
 # 创建数据库命名空间
 kubectl create namespace gitea
 
 # 部署 PostgreSQL
 helm install gitea-db bitnami/postgresql \
 --namespace gitea \
 --set auth.postgresPassword=yourStrongPassword \
 --set persistence.size=5Gi \
 --set persistence.hostPath=/opt/k8s-data/gitea/db
 
 | 
2.2 部署 Gitea 服务
2.2.1 创建配置文件 ConfigMap
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | apiVersion: v1
 kind: ConfigMap
 metadata:
 name: gitea-config
 namespace: gitea
 data:
 app.ini: |
 [server]
 DOMAIN = gitea.wdft.com
 ROOT_URL = https://gitea.wdft.com/
 
 [database]
 DB_TYPE = postgres
 HOST = gitea-db-postgresql:5432
 NAME = postgres
 USER = postgres
 PASSWD = yourStrongPassword
 
 [repository]
 ROOT = /data/git/repositories
 
 | 
2.2.2 部署 Gitea 应用
| 12
 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
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 
 | apiVersion: apps/v1
 kind: Deployment
 metadata:
 name: gitea
 namespace: gitea
 spec:
 replicas: 1
 selector:
 matchLabels:
 app: gitea
 template:
 metadata:
 labels:
 app: gitea
 spec:
 containers:
 - name: gitea
 image: gitea/gitea:latest
 ports:
 - containerPort: 3000
 volumeMounts:
 - name: gitea-config
 mountPath: /etc/gitea/app.ini
 subPath: app.ini
 - name: gitea-data
 mountPath: /data
 volumes:
 - name: gitea-config
 configMap:
 name: gitea-config
 - name: gitea-data
 hostPath:
 path: /opt/k8s-data/gitea
 
 apiVersion: v1
 kind: Service
 metadata:
 name: gitea
 namespace: gitea
 spec:
 ports:
 - port: 80
 targetPort: 3000
 selector:
 app: gitea
 
 apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
 name: gitea-ingress
 namespace: gitea
 annotations:
 nginx.ingress.kubernetes.io/ssl-redirect: "false"
 spec:
 rules:
 - http:
 paths:
 - path: /
 pathType: Prefix
 backend:
 service:
 name: gitea
 port:
 number: 80
 
 | 
2.2.3 应用部署
| 12
 
 | kubectl apply -f gitea-config.yamlkubectl apply -f gitea-deployment.yaml
 
 | 
2.2.4 访问初始化
| 12
 3
 4
 5
 6
 7
 8
 
 | # 查看 Ingress IPkubectl get ingress -n gitea
 
 # 浏览器访问 http://<INGRESS_IP> 并完成初始化:
 # 数据库选择 PostgreSQL
 # 数据库用户名/密码:postgres / yourStrongPassword
 # 仓库根目录:/data/git/repositories
 # 确认域名配置为 gitea.wdft.com
 
 | 
🌊 三、集成 Harbor 镜像仓库
3.1 安装 Helm 客户端(所有节点)
| 12
 
 | curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3chmod 700 get_helm.sh && ./get_helm.sh
 
 | 
3.2 部署 Harbor 依赖组件
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | # 创建命名空间kubectl create namespace harbor
 
 # 部署 Redis
 helm install harbor-redis bitnami/redis \
 --namespace harbor \
 --set password=redisPassword \
 --set persistence.hostPath=/opt/k8s-data/harbor/redis
 
 # 部署 PostgreSQL
 helm install harbor-db bitnami/postgresql \
 --namespace harbor \
 --set auth.postgresPassword=harborPassword \
 --set persistence.hostPath=/opt/k8s-data/harbor/db
 
 | 
3.3 创建 Harbor 配置文件
3.3.1 自签名证书生成(Master 节点)
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | mkdir -p /opt/certscd /opt/certs
 openssl genrsa -out ca.key 4096
 openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=Harbor/CN=harbor.wdft.com" \
 -key ca.key -out ca.crt
 
 openssl req -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=Harbor/CN=harbor.wdft.com" \
 -keyout harbor.key -out harbor.csr
 
 openssl x509 -req -sha512 -days 3650 \
 -CA ca.crt -CAkey ca.key -CAcreateserial \
 -in harbor.csr -out harbor.crt
 
 # 所有节点信任证书
 sudo cp /opt/certs/ca.crt /usr/local/share/ca-certificates/
 sudo update-ca-certificates
 sudo systemctl restart containerd
 
 | 
3.3.2 创建 Harbor Values 文件
| 12
 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
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 
 | hostname: harbor.wdft.com
 
 networkPolicy:
 notary: false
 clair: false
 chartmuseum: false
 
 externalURL: https://harbor.wdft.com
 ssl:
 enabled: true
 cert:
 certificate: |-
 -----BEGIN CERTIFICATE-----
 $(cat /opt/certs/harbor.crt | grep -v "BEGIN CERTIFICATE" | grep -v "END CERTIFICATE")
 -----END CERTIFICATE-----
 privateKey: |-
 -----BEGIN PRIVATE KEY-----
 $(cat /opt/certs/harbor.key | grep -v "BEGIN PRIVATE KEY" | grep -v "END PRIVATE KEY")
 -----END PRIVATE KEY-----
 
 database:
 type: external
 external:
 host: harbor-db-postgresql
 port: 5432
 username: postgres
 password: harborPassword
 database: harbor
 
 redis:
 host: harbor-redis
 port: 6379
 password: redisPassword
 
 persistence:
 persistentVolumeClaim:
 registry:
 existingClaim: ""
 jobservice:
 existingClaim: ""
 chartmuseum:
 existingClaim: ""
 clair:
 existingClaim: ""
 notary:
 existingClaim: ""
 trivy:
 existingClaim: ""
 hostPath:
 /opt/k8s-data/harbor
 
 | 
3.4 部署 Harbor
| 12
 3
 4
 5
 6
 7
 8
 
 | # 添加 Harbor Helm 仓库helm repo add harbor https://helm.goharbor.io
 helm repo update
 
 # 安装 Harbor
 helm install harbor harbor/harbor \
 --namespace harbor \
 --values harbor-values.yaml
 
 | 
3.5 配置 Ingress 规则
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 
 | apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
 name: harbor-ingress
 namespace: harbor
 annotations:
 nginx.ingress.kubernetes.io/ssl-passthrough: "true"
 spec:
 tls:
 - hosts:
 - harbor.wdft.com
 secretName: harbor-ingress-tls
 rules:
 - http:
 paths:
 - path: /
 pathType: Prefix
 backend:
 service:
 name: harbor-core
 port:
 number: 443
 
 | 
| 12
 3
 4
 5
 6
 7
 
 | # 创建 TLS Secretkubectl -n harbor create secret tls harbor-ingress-tls \
 --cert=/opt/certs/harbor.crt \
 --key=/opt/certs/harbor.key
 
 # 应用 Ingress
 kubectl apply -f harbor-ingress.yaml
 
 | 
🔄 四、集成验证
4.1 修改 Go 应用部署文件
| 12
 
 | image: harbor.wdft.com/library/go-hello:1.0
 
 | 
4.2 配置 Kubernetes 秘钥
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | # 创建镜像拉取秘钥kubectl create secret docker-registry regcred \
 --docker-server=https://harbor.wdft.com \
 --docker-username=admin \
 --docker-password=Harbor12345 \
 --docker-email=admin@wdft.com
 
 # 修改 Deployment 添加 imagePullSecrets
 spec:
 template:
 spec:
 imagePullSecrets:
 - name: regcred
 
 | 
4.3 推送镜像到 Harbor
| 12
 3
 4
 5
 6
 
 | # 登录 Harbordocker login harbor.wdft.com -u admin -p Harbor12345
 
 # 重新构建并推送镜像
 docker build -t harbor.wdft.com/library/go-hello:1.0 .
 docker push harbor.wdft.com/library/go-hello:1.0
 
 | 
🧪 五、完整 CI/CD 流程演示
- 代码提交
 在 Gitea 创建新仓库- go-hello,推送代码:
 | 12
 
 | git remote add origin http://git.wdft.com/ljq/go-hello.gitgit push -u origin master
 
 |  
 
- 镜像构建
 修改构建命令指向私有仓库:
 | 12
 
 | docker build -t harbor.wdft.com/ljq/go-hello:latest .docker push harbor.wdft.com/ljq/go-hello:latest
 
 |  
 
- 生产部署
 更新 Deployment 镜像地址后重新部署:
 | 1
 | kubectl apply -f deployment.yaml
 |  
 
📌 六、配置参考图示
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | +-------------------+     +------------------+     +-------------------+|                   |     |                  |     |                   |
 |   Gitea Code Repo |<--->| Harbor Registry  |<--->| Kubernetes Cluster|
 |                   |     |                  |     |                   |
 +-------------------+     +------------------+     +-------------------+
 ^                          ^                        ^
 |                          |                        |
 v                          v                        v
 Developer Workstation    CI/CD Pipeline        Production Environment
 
 | 
📚 七、后续优化建议
- 安全加固 - 使用 Let’s Encrypt 自动签发证书
- 配置 RBAC 权限隔离
- 启用 Harbor 的 Clair 漏洞扫描
 
- 存储优化 - 替换 hostPath 为 NFS 或云存储
- 配置 Harbor 的 MinIO 后端存储
 
- 高可用 - 部署 PostgreSQL + Patroni 集群
- 使用 Redis Cluster 替代单实例
 
- 监控告警 - 部署 Prometheus + Grafana
- 配置 Harbor 自带的监控面板
 
💡 注意事项:
- 将 harbor.wdft.com和gitea.wdft.com替换为实际域名
 
- 生产环境应使用独立存储类(StorageClass)
 
- 所有敏感信息应通过 Kubernetes Secret 管理
 
- 建议为 Harbor 配置独立的 DNS 解析记录