按照以下说明在使用适用于 vSphere 7.x 的 TKr 置备的 TKG 集群上安装 Harbor。
必备条件
请参见在适用于 vSphere 7.x 的 TKr 上安装标准软件包的工作流。
Harbor 需要 HTTP/S Ingress。Harbor 服务通过 Contour 软件包中的 Envoy 服务公开。作为必备条件,请部署 Contour 软件包。请参见
在适用于 vSphere 7.x 的 TKr 上安装 Contour。
- 如果对 主管 使用的是 NSX 网络连接,请创建 LoadBalancer 类型的 Envoy 服务。
- 如果对 主管 使用的是 vSphere vDS 网络连接,请创建 LoadBalancer 或 NodePort 类型的 Envoy 服务,具体取决于您的环境和要求。
在生产环境中,Harbor 要求本地 DNS 服务器(如 BIND)或公有云(如 AWS Route53 或 Azure DNS)上具有 DNS 区域。设置 DNS 后,要在 DNS 服务器中自动注册 Harbor FQDN,请安装 ExternalDNS 扩展。请参见在适用于 vSphere 7.x 的 TKr 上安装 ExternalDNS。
安装 Harbor
要使用标准软件包安装 Harbor 注册表,请完成以下步骤。
- 列出存储库中的可用 Harbor 版本。
kubectl get packages -n tkg-system | grep harbor
- 创建
harbor.yaml
规范apiVersion: v1 kind: ServiceAccount metadata: name: harbor-sa namespace: tkg-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: habor-role-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: harbor-sa namespace: tkg-system --- apiVersion: packaging.carvel.dev/v1alpha1 kind: PackageInstall metadata: name: harbor namespace: tkg-system spec: serviceAccountName: harbor-sa packageRef: refName: harbor.tanzu.vmware.com versionSelection: constraints: 2.7.1+vmware.1-tkg.1 #PKG-VERSION values: - secretRef: name: harbor-data-values --- apiVersion: v1 kind: Secret metadata: name: harbor-data-values namespace: harbor-registry stringData: values.yml: | namespace: tanzu-system-registry hostname: <ENTER-HARBOR-FQDN> port: https: 443 logLevel: info tlsCertificate: tls.crt: "" tls.key: "" ca.crt: tlsCertificateSecretName: enableContourHttpProxy: true harborAdminPassword: <ENTER-STRONG-PASSWORD-HERE> secretKey: <ENTER-SECRET-KEY> database: password: <ENTER-STRONG-PASSWORD-HERE> shmSizeLimit: maxIdleConns: maxOpenConns: exporter: cacheDuration: core: replicas: 1 secret: <ENTER-SECRET> xsrfKey: <ENTER-XSRF-KEY-WHICH-IS-AN-ALPHANUMERIC-STRING-WITH-32-CHARS> jobservice: replicas: 1 secret: <ENTER-SECRET> registry: replicas: 1 secret: <ENTER-SECRET> trivy: enabled: true replicas: 1 gitHubToken: "" skipUpdate: false persistence: persistentVolumeClaim: registry: existingClaim: "" storageClass: "<ENTER-STORAGE-CLASS>" subPath: "" accessMode: ReadWriteOnce size: 50Gi jobservice: existingClaim: "" storageClass: "<ENTER-STORAGE-CLASS>" subPath: "" accessMode: ReadWriteOnce size: 10Gi database: existingClaim: "" storageClass: "<ENTER-STORAGE-CLASS>" subPath: "" accessMode: ReadWriteOnce size: 10Gi redis: existingClaim: "" storageClass: "<ENTER-STORAGE-CLASS>" subPath: "" accessMode: ReadWriteOnce size: 10Gi trivy: existingClaim: "" storageClass: "<ENTER-STORAGE-CLASS>" subPath: "" accessMode: ReadWriteOnce size: 10Gi proxy: httpProxy: httpsProxy: noProxy: 127.0.0.1,localhost,.local,.internal pspNames: vmware-system-restricted network: ipFamilies: ["IPv4", "IPv6"]
- 使用适用于您环境的适当值自定义
harbor.yaml
规范中的harbor-data-values
密钥,包括主机名、密码、密钥和存储类。有关指导,请参阅 Harbor 软件包参考。
- 安装 Harbor。
kubectl apply -f harbor.yaml
- 验证 Harbor 安装。
kubectl get all -n harbor-registry
使用 Envoy LoadBalancer 为 Harbor 配置 DNS(NSX 网络连接)
如果通过 LoadBalancer 公开必备的 Envoy 服务,请获取负载均衡器的外部 IP 地址,并创建 Harbor FQDN 的 DNS 记录。
- 获取 LoadBalancer 类型的 Envoy 服务的
External-IP
地址。kubectl get service envoy -n tanzu-system-ingress
您应该会看到返回的External-IP
地址,例如:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE envoy LoadBalancer 10.99.25.220 10.195.141.17 80:30437/TCP,443:30589/TCP 3h27m
或者,也可以使用以下命令获取External-IP
地址。kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
- 要验证 Harbor 扩展的安装,请使用映射到负载均衡器的
External-IP
地址的 Harbor 和 Notary FQDN 更新本地/etc/hosts
文件,例如:127.0.0.1 localhost 127.0.1.1 ubuntu #TKG Harbor with Envoy Load Balancer IP 10.195.141.17 core.harbor.domain 10.195.141.17 core.notary.harbor.domain
- 要验证 Harbor 扩展的安装,请登录到 Harbor。
- 在 DNS 服务器上创建两个 CNAME 记录,以将 Envoy 服务负载均衡器
External-IP
地址映射到 Harbor FQDN 和 Notary FQDN。 - 安装外部 DNS 扩展。
使用 Envoy NodePort 为 Harbor 配置 DNS(vDS 网络连接)
如果通过 NodePort 公开必备的 Envoy 服务,请获取工作节点的虚拟机 IP 地址,并创建 Harbor FQDN 的 DNS 记录。
注: 要使用 NodePort,必须在
harbor-data-values.yaml
文件中指定正确的
port.https
值。
- 将上下文切换到置备了集群的 vSphere 命名空间。
kubectl config use-context VSPHERE-NAMESPACE
- 列出集群中的节点。
kubectl get virtualmachines
- 选择其中一个工作节点,然后使用以下命令对其进行描述。
kubectl describe virtualmachines tkg2-cluster-X-workers-9twdr-59bc54dc97-kt4cm
- 找到虚拟机的 IP 地址,例如
Vm Ip: 10.115.22.43
。 - 要验证 Harbor 扩展的安装,请使用映射到工作节点 IP 地址的 Harbor 和 Notary FQDN 更新本地
/etc/hosts
文件,例如:127.0.0.1 localhost 127.0.1.1 ubuntu #TKG Harbor with Envoy NodePort 10.115.22.43 core.harbor.domain 10.115.22.43 core.notary.harbor.domain
- 要验证 Harbor 扩展的安装,请登录到 Harbor。
- 在 DNS 服务器上创建两个 CNAME 记录,以将工作节点 IP 地址映射到 Harbor FQDN 和 Notary FQDN。
- 安装外部 DNS 扩展。
登录到 Harbor Web 界面
安装并配置 Harbor 后,请登录并开始使用。
- 访问 Harbor 注册表 Web 界面 (
https://core.harbor.domain
) 或您使用的主机名。 - 使用用户名 admin 和生成的密码(放在
harbor-data-values.yaml
文件中)登录到 Harbor。 - 验证您是否可以访问 Harbor 用户界面。
- 获取 Harbor CA 证书。
在 Harbor 界面中,选择新项目。
,或者创建单击注册表证书并下载 Harbor CA 证书 (ca.crt)。
- 将 Harbor CA 证书添加到 Docker 客户端的信任库中,以便可以将容器映像推送到 Harbor 注册表以及从 Harbor 注册表中提取容器映像。请参见对 TKG 服务 集群使用专用注册表。
- 有关使用 Harbor 的详细信息,请参阅 Harbor 文档。