次の手順に従って、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 Distributed Switch ネットワークを使用している場合は、環境と要件に応じて LoadBalancer タイプまたは NodePort タイプの Envoy サービスを作成します。
本番環境の Harbor では、BIND などのローカル DNS サーバ、または AWS Route53 や Azure DNS などのパブリック クラウドのいずれかの DNS ゾーンが必要です。DNS を設定した後、Harbor の FQDN を DNS サーバに自動的に登録するには、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 ネットワーク)
前提条件の Envoy サービスが LoadBalancer を介して公開される場合は、ロード バランサの外部 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 にログインします。
- Envoy サービスのロード バランサの
External-IP
アドレスを Harbor の FQDN と Notary の FQDN にマッピングする 2 つの CNAME レコードを DNS サーバに作成します。 - 外部 DNS 拡張機能をインストールします。
Envoy NodePort を使用する Harbor 向けの DNS の構成(Distributed Switch ネットワーク)
前提条件の Envoy サービスが NodePort を介して公開される場合は、ワーカー ノードの仮想マシンの IP アドレスを取得し、Harbor の FQDN の DNS レコードを作成します。
注: NodePort を使用するには、
harbor-data-values.yaml
ファイルに正しい
port.https
値を指定しておく必要があります。
- クラスタがプロビジョニングされている vSphere 名前空間 にコンテキストを切り替えます。
kubectl config use-context VSPHERE-NAMESPACE
- クラスタ内のノードを一覧表示します。
kubectl get virtualmachines
- ワーカー ノードの 1 つを選択し、次のコマンドを使用して記述します。
kubectl describe virtualmachines tkg2-cluster-X-workers-9twdr-59bc54dc97-kt4cm
Vm Ip: 10.115.22.43
などの仮想マシンの IP アドレスを見つけます。- 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 にログインします。
- ワーカー ノードの IP アドレスを Harbor の FQDN と Notary の FQDN にマッピングする 2 つの CNAME レコードを DNS サーバに作成します。
- 外部 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 レジストリとの間でコンテナ イメージをプッシュおよびプルできるようにします。TKG サービス クラスタでのプライベート レジストリの使用を参照してください。
- Harbor の使用方法の詳細については、Harbor のドキュメントを参照してください。