DUICUO

ContainerdはプライベートイメージリポジトリHarborと統合します

Harborは、CNCF Foundationがホストするオープンソースで信頼性の高いクラウドネイティブのDockerレジストリプロジェクトです。イメージコンテンツの保存、署名、スキャンに使用できます。Harborは、セキュリティやID管理などの共通機能を追加することで、Dockerレジストリプロジェクトを拡張します。さらに、レジストリ間でのイメージのコピーをサポートし、ユーザー管理、アクセス制御、アクティビティ監査などの高度なセキュリティ機能を提供します。新バージョンでは、Helmリポジトリホスティングのサポートも追加されています。

Harborの中核機能は、Dockerレジストリに権限保護レイヤーを追加することです。これを実現するには、docker login、pull、pushなどのコマンドをインターセプトし、まず権限チェックを実行してから操作を続行する必要があります。実際、Dockerレジストリv2では、この一連の操作が既にサポートされています。v2はセキュリティ認証機能を統合し、外部サービスにセキュリティ認証を公開することで、外部サービスがセキュリティ認証を実装できるようにしています。

港湾認証原則

前述の通り、Docker Registry v2 は外部サービスへのセキュリティ認証を公開します。では、この公開はどのように実現されるのでしょうか?コマンドラインで「docker login https://registry.qikqiak.com」と入力して、認証プロセスを見てみましょう。

  1. Docker クライアントは、ユーザーから Docker ログイン コマンドを受信し、それをエンジン API の RegistryLogin メソッドへの呼び出しに変換します。
  2. RegistryLogin メソッドは、HTTP 経由でレジストリ サービス内の認証メソッドを呼び出します。
  3. サービスのバージョンv2を使用しているため、loginV2メソッドが呼び出されます。loginV2メソッドは/v2/インターフェースを呼び出し、リクエストを認証します。
  4. この時点でのリクエストにはトークン情報が含まれていないため、認証は失敗し、401エラーが返されます。ヘッダーには、認証リクエストを送信したサーバーのアドレスも返されます。
  5. 上記の応答を受信した後、レジストリクライアントは認証サーバーに認証リクエストを送信します。認証サーバーに送信されるリクエストのヘッダーには、暗号化されたユーザー名とパスワードが含まれます。
  6. 認証サーバーは、ヘッダーから暗号化されたユーザー名とパスワードを取得します。この時点で、データベースからユーザー認証情報を照会したり、LDAPサービスに接続して認証検証を行うなど、実際の認証システムと連携して認証を実行できます。
  7. 認証に成功するとトークンが返されます。クライアントはこのトークンを使用して、レジストリサービスに別のリクエストを送信します。今回は取得したトークンが含まれます。リクエストが正常に検証されると、ステータスコード200が返されます。
  8. Dockerクライアントは、操作が成功したことを示すステータスコード200を受け取ります。コンソールには「ログイン成功」と表示されます。これでログインプロセス全体が完了します。プロセス全体は、以下のフローチャートで表すことができます。

上記のログイン認証プロセスを完了するには、2つの重要なポイントに注意する必要があります。レジストリサービスにサービス認証アドレスをどのように通知するか、そしてレジストリが独自の認証サービスによって生成されたトークンを認識できるのはなぜか、という点です。

最初の問題は比較的簡単に解決できます。レジストリサービス自体が設定ファイルを提供しており、レジストリサービスを起動する際に設定ファイルに認証サービスのアドレスを指定できます。設定ファイルには以下の設定情報が含まれています。

 ……
認証:
トークン:
レルム: トークン- レルム
サービス: トークン- サービス
発行者: レジストリ- トークン- 発行者
rootcertbundle : / root / certs / bundle
……

レルムは認証サービスのアドレスを指定するために使用できます。以下に、Harborにおけるこの設定の内容を示します。

レジストリの設定については、公式ドキュメント (https://docs.docker.com/registry/configuration/) を参照してください。

2つ目の疑問は、レジストリが返したトークンファイルをどのように認識するかということです。レジストリの要件に従ってトークンを生成すれば、レジストリはそれを認識できるでしょうか? そのため、認証サーバーでトークンをランダムに生成するのではなく、レジストリの要件に従って生成する必要があります。では、どのように生成するのでしょうか? Dockerレジストリのソースコードを見ると、トークンはJWT(JSON Web Token)を使用して実装されていることがわかります。つまり、要件に従ってJWTトークンを生成するだけです。

Go言語に詳しい方は、Harborのコードをクローンして確認してみてください。HarborはBeegoというWeb開発フレームワークを使用しており、そのソースコードは特に読みにくいものではありません。Harborでは、上で説明した認証サービス部分の実装方法を簡単に確認できます。

インストール

Harborには多くのコンポーネントが含まれており、Helmを使用してHarborの高可用性バージョンをインストールできます。これは本番環境へのデプロイメントにも対応しています。高可用性バージョンをインストールする前に、以下の前提条件を満たす必要があります。

  • Kubernetes クラスター バージョン 1.10 以降。
  • Helm バージョン 2.8.0 以上。
  • 可用性の高い Ingress コントローラー。
  • 高可用性 PostgreSQL 9.6+ (Harbor はデータベース HA を展開しません)。
  • 可用性の高い Redis サービス (Harbor はこれを処理しません)。
  • PVC はノード間または外部オブジェクト ストレージ間で共有できます。

Harborのコンポーネントのほとんどはステートレスであるため、Podのレプリカを追加するだけで、コンポーネントを可能な限り複数のノードに分散させることができます。ストレージ層では、アプリケーションデータを保存するための高可用性のPostgreSQLおよびRedisクラスターに加え、ストレージイメージとHelm Charts用のPVCまたはオブジェクトストレージを提供する必要があります。

まず、Chart リポジトリのアドレスを追加します。

 # チャートリポジトリを追加
$ helm リポジトリハーバーを追加しますhttps://helm.goharbor.io
#更新
$ helm リポジトリの更新
#プルし抽出バージョン1.9.2
$ helm pull harbor / harbor -- untar -- バージョン1.9.2

Harborのインストール時には、多くの設定可能なパラメータがあります。これらはharbor-helmプロジェクトで確認できます。インストール中に、`--set`オプションを使用してパラメータを指定するか、`values.yaml`ファイルを直接編集することができます。

  • Ingress 構成は、expose.ingress.hosts.core と expose.ingress.hosts.notary を通じて実現されます。
  • 外部 URL は externalURL を介して構成されます。
  • 外部PostgreSQLは、`database.type`を`external`に設定し、`database.external`の情報を入力することで設定できます。Harborコア、Notaryサーバー、Notary署名者の3つの空のデータベースを手動で作成する必要があります。Harborは起動時にテーブル構造を自動的に作成します。
  • 外部Redisインスタンスは、`redis.type`を`external`に設定し、`redis.external`セクションに情報を入力することで設定できます。Harborはバージョン2.1.0でRedis Sentinelモードを導入しました。これは`sentinel_master_set`を設定することで有効にできます。ホストアドレスは`<host_sentinel1>:<port_sentinel1>`、`<host_sentinel2>:<port_sentinel2>`、`<host_sentinel3>:<port_sentinel3>`に設定できます。また、https://community.pivotal.io/s/article/How-to-setup-HAProxy-and-Redis-Sentinel-for-automatic-failover-between-Redis-Master-and-Slave-servers`のドキュメントを参照して、Redisの前にHAProxyを配置し、単一のエントリポイントを公開することもできます。
  • デフォルトでは、Kubernetes クラスターにデフォルトの StorageClass が必要です。これは、画像、チャート、タスクログを保存するための PV を自動生成するためのものです。StorageClass を指定する場合は、`persistence.persistentVolumeClaim.registry.storageClass`、`persistence.persistentVolumeClaim.chartmuseum.storageClass`、および `persistence.persistentVolumeClaim.jobservice.storageClass` を使用して設定できます。さらに、PV が異なるノード間でストレージを共有できるようにするには、`accessMode` を `ReadWriteMany` に設定する必要があります。あるいは、`existingClaim` を使用して設定できる既存の PVC を指定してデータを保存することもできます。ノード間で共有できる PVC がない場合は、外部ストレージを使用して画像やチャートを保存し(サポートされている外部ストレージ オプションには、Azure、GCS、S3 Swift、OSS などがあります)、タスクログをデータベースに保存できます。使用したい値をpersistence.imageChartStorage.typeに設定し、対応する部分を入力し、jobservice.jobLoggerをデータベースに設定します。
  • レプリカ: portal.replicas​、core.replicas​、jobservice.replicas​、registry.replicas​、chartmuseum.replicas​、notary.server.replicas​、notary.signer.replicas を n (n>= 2) に設定します。

例えば、ここではメインドメインをharbor.k8s.localとして設定し、nfs-client StorageClassを介してストレージを提供します。GitLabのインストール時にPostgreSQLとRedisを個別にインストール済みなので、Harborがこれら2つの外部データベースを使用するように設定することもできます。これにより、リソース使用量を削減できます(両方のデータベースをHAモードと見なすことができます)。ただし、外部データベースを使用するには、事前にデータベースを手動で作成する必要があります。例えば、GitLabが提供するデータベースを使用する場合、このPodにharbor、notary_server、notary_signerの3つのデータベースを作成します。

 $ kubectl get pods - n kube - ops - l name = postgresql
名前準備完了ステータス再起動年齢
postgresql - 75 b8447fb5 - th6bw 1 / 1 実行中1 2 d
$ kubectl exec -it postgresql -75 b8447fb5 -th6bw / bin / bash -n kube -ops
kubectl exec [ POD ] [ COMMAND ] は非推奨であり 将来のバージョン削除れる予定です代わりにkubectl exec [ POD ] -- [ COMMAND ] を使用してください
root @postgresql - 75 b8447fb5 - th6bw : / var / lib / postgresql # sudo su - postgres
postgres @postgresql - 75 b8447fb5 - th6bw : ~$ psql
psql ( 12.3 ( Ubuntu 12.3 - 1. pgdg18 .04 + 1 ))
ヘルプを表示するには「help」入力してください
postgres = # データベースharbor OWNER postgres を作成します
データベースの作成
postgres = # データベースharbor すべての権限をpostgres 付与します
付与
postgres = # データベースharbor すべての権限をgitlab 付与します
付与
# Todo : 同じ方法で他の2つのデータベース notary_server と notary_signer を作成します。
……
postgres - # \ q # 終了

データベースの準備が完了したら、カスタム値ファイルを使用してインストールを実行できます。完全なカスタム値ファイルを以下に示します。

 # - prod.yaml 
外部URL : https : //harbor.k8s.local
harborAdminパスワード: Harbor12345
ログレベル: デバッグ
さらす
タイプ: 入力
TLS :
有効: true
入口
className : nginx # イングレスクラスを指定します
ホスト:
コア: harbor.k8s.local
公証人: notary.k8s.local
持続性
有効: true
リソースポリシー: "keep"
永続ボリュームクレーム:
レジストリ:
#高可用性を実現するには、複数のレプリカを持つコンポーネントで ReadWriteMany をサポートするバックエンドを使用する必要があります
# ここでは NFS を使用していますが、実稼働環境では NFS は推奨されません。
ストレージクラス: "nfs-client"
# 高可用性を実現するには、複数のレプリカ コンポーネントでReadWriteMany を使用する必要があります。デフォルトはReadWriteOnce です。
アクセスモード: ReadWriteMany
サイズ 5G
チャートミュージアム:
ストレージクラス: "nfs-client"
アクセスモード: ReadWriteMany
サイズ 5G
ジョブサービス:
ストレージクラス: "nfs-client"
アクセスモード: ReadWriteMany
サイズ 1Gi
トリビー
ストレージクラス: "nfs-client"
アクセスモード: ReadWriteMany
サイズ 2Gi
データベース:
タイプ: 外部
外部の
ホスト: "postgresql.kube-ops.svc.cluster.local"
ポート: "5432"
ユーザー名: "gitlab"
パスワード「passw0rd」
コアデータベース「港」
公証サーバーデータベース: "notary_server"
公証人署名データベース: "公証人署名者"
レディス:
タイプ: 外部
外部の
アドレス: "redis.kube-ops.svc.cluster.local:6379"
# デフォルトはレプリカ1つです。高可用性を有効にするには、 レプリカ数2 以上に設定します
ポータル:
レプリカ1
コア:
レプリカ1
ジョブサービス:
レプリカ1
レジストリ:
レプリカ1
チャートミュージアム:
レプリカ1
トリビー
レプリカ1
公証人
サーバー:
レプリカ1
署名者:
レプリカ1

これらの構成の詳細は、Harbor の Chart パッケージのデフォルト値に基づいて上書きされ、インストールを直接続行できるようになりました。

 $ cd ハーバー
$ helm upgrade -- harbor インストールします - f values ​​-prod .yaml -n kube -ops
リリース「harbor」存在ません現在インストール中です
名前
最終展開日: 2022年7月7 ( ) 17:31:43
名前空間: kube - ops
ステータス: 展開済み
改訂1
テストスイート: なし
注記:
Harbor の展開完了するまで分間お待ちください
その後、 Harbor ポータルhttps//harbor.k8s.local アクセスできるようになります
詳細について https://github.com/goharbor/harbor をご覧ください

通常の状況では、しばらくするとインストールは成功します。

 $ helm ls -n kube -ops
名前名前空間リビジョン更新ステータスチャートアプリバージョン
harbor kube - ops 1 2022 - 07 - 07 17 : 31 : 43.083547 + 0800 CST デプロイ済みharbor - 1.9 .2 2.5 .2
$ kubectl get pods - n kube - ops - l app = harbor
名前準備完了ステータス再起動年齢
- チャートミュージアム- 544 ddbcb64 - nvk7w 1 / 1 ランニング0 30 m
ハーバー- コア- 7f d9964685 - lqqw2 1 / 1 ランニング0 30 m
- ジョブサービス- 6 dbd89c59 - vvzx5 1 / 1 ランニング0 30 m
- 公証人- サーバー- 764 b8859bf - 82f 5 q 1 / 1 実行中0 30 m
- 公証人- 署名者- 869 d9bf585 - kbwwg 1 / 1 ランニング0 30 m
- ポータル- 74 db6bb688 - 2 w79p 1 / 1 ランニング0 35 m
- レジストリ- 695 db89bfd - v9wwt 2 / 2 実行中0 30 m
ハーバー- トリヴィ- 0 1 / 1 ランニング0 35 m

インストール後、ドメイン harbor.k8s.local を Ingress Controller トラフィック エントリ ポイントに解決し、そのドメインを使用してブラウザーからアクセスできるようになります。

 $ kubectl get ingress - n kube - ops
名前クラスホストアドレスポート年齢
ハーバー- イングレスnginx ハーバー. k8s . ローカル80 , 443 12
ハーバー- イングレス- 公証人nginx 公証人. k8s . ローカル80 , 443 12

ユーザー名はデフォルトの「admin」、パスワードは上記で設定したデフォルトの「Harbor12345」です。サイトにアクセスするにはHTTPSを使用する必要があります(デフォルトではHTTPSにリダイレクトされます)。HTTPSを使用しない場合、ユーザー名またはパスワードが間違っていることを示すエラーメッセージが表示される場合があります。

ログイン後、Harbor Dashboard ページにアクセスできます。

多くの機能があることがわかります。デフォルトでは「library」というプロジェクトがあり、このプロジェクトはデフォルトで公開されています。プロジェクト内では、Helm Chartパッケージの管理を確認できます。パッケージは手動でアップロードしたり、このプロジェクトでミラーのその他の設定を行ったりできます。

プッシュ画像

次に、containerd で Harbor イメージ リポジトリを使用する方法をテストします。

まず、containerd でプライベートイメージリポジトリを設定する必要があります。containerd 設定ファイル /etc/containerd/config.toml を変更します。

 [ プラグイン. "io.containerd.grpc.v1.cri" . レジストリ]
[ プラグイン. "io.containerd.grpc.v1.cri" . レジストリ. ミラー]
[ プラグイン. "io.containerd.grpc.v1.cri" . レジストリ. ミラー. "docker.io" ]
エンドポイント= [ "https://bqr1dr1n.mirror.aliyuncs.com" ]
[ プラグイン. "io.containerd.grpc.v1.cri" . レジストリ. 構成]
[ プラグイン. "io.containerd.grpc.v1.cri" . レジストリ. configs . "harbor.k8s.local" . tls ]
安全でないスキップ検証= true
[ プラグイン. "io.containerd.grpc.v1.cri" . レジストリ. configs . "harbor.k8s.local" . 認証]
ユーザー名= "admin"
パスワード= "Harbor12345"

plugins."io.containerd.grpc.v1.cri".registry.configs に、harbor.k8s.local に対応する設定情報を追加します。insecure_skip_verify = true は、セキュリティ検証をスキップすることを示します。次に、plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.k8s.local".auth で、Harbor イメージリポジトリのユーザー名とパスワードを設定します。

設定後、containerd を再起動します。

 $ systemctl コンテナを再起動します

ここで、nerdctl を使用してログインします。

 $ nerdctl login -u admin harbor . k8s . local
パスワードを入力してください:
ERRO [ 0004 ] tryLoginWithRegHost の呼び出し失敗しましたerror = "rh.Client.Do: Get \"https://harbor.k8s.local/v2/\": x509: 不明な機関によって署名された証明書" i = 0
FATA [ 0004 ] rh の呼び出し失敗しましたクライアント実行: "https://harbor.k8s.local/v2/" を取得: x509 : 不明な認証局によって署名された証明書
[ ルート@master1 ~ ] #

ご覧のとおり、証明書関連のエラーは依然として発生します。`--insecure-registry` パラメータを追加するだけで、この問題は解決します。

 $ nerdctl login -u admin --insecure - registry harbor .k8s .local  
パスワードを入力してください:
警告[ 0004 ] 「harbor.k8s.local」 HTTPS 証明書の検証をスキップします
警告: パスワードは暗号化されずに/root/.docker/config.json 保存さます
この警告を削除するには、 認証ヘルパー設定します
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
ログインに成功しました

次にランダムな鏡像を作成しましょう。

 $ nerdctl プルビジーボックス: 1.35 .0
docker .io / library / busybox : 1.35 .0 : 解決済み|++++++++++++++++++++++++++++++++++++++++|
インデックス- sha256 : 8 c40df61d40166f5791f44b3d90b77b4c7f59ed39a992fd9046886d3126ffa68 : 完了|++++++++++++++++++++++++++++++++++++++++|
マニフェスト- sha256 : 8 cde9b8065696b65d7b7ffaefbab0262d47a5a9852bfd849799559d296d2e0cd : 完了|++++++++++++++++++++++++++++++++++++++++|
config - sha256 : d8c0f97fc6a6ac400e43342e67d06222b27cecdb076cbf8a87f3a2a25effe81c : 完了|++++++++++++++++++++++++++++++++++++++++|
レイヤー- sha256 : fc0cda0e09ab32c72c61d272bb409da4e2f73165c7bf584226880c9b85438e63 : 完了|++++++++++++++++++++++++++++++++++++++++|
経過時間: 83.7

次に、Harbor の画像アドレスに画像を再タグ付けします。

 $ nerdctl タグbusybox : 1.35.0 harbor.k8s.local / library / busybox : 1.35.0  

次に、push コマンドを実行してイメージを Harbor にプッシュします。

 $ nerdctl push --insecure - registry harbor .k8s .local / library / busybox : 1.35 .0
INFO [ 0000 ] 縮小プラットフォームイメージとしてプッシュ( application / vnd . docker . distribution . manifest . list . v2 + json sha256 : 29f e0126b13c3ea2641ca42c450fa69583d212dbd9b7b623814977b5b0945726 )
警告[ 0000 ] 「harbor.k8s.local」 HTTPS 証明書の検証をスキップします
インデックス- sha256 : 29f e0126b13c3ea2641ca42c450fa69583d212dbd9b7b623814977b5b0945726 : 完了|++++++++++++++++++++++++++++++++++++++++|
マニフェスト- sha256 : 8 cde9b8065696b65d7b7ffaefbab0262d47a5a9852bfd849799559d296d2e0cd : 完了|++++++++++++++++++++++++++++++++++++++++|
config - sha256 : d8c0f97fc6a6ac400e43342e67d06222b27cecdb076cbf8a87f3a2a25effe81c : 完了|++++++++++++++++++++++++++++++++++++++++|
経過時間6.9 合計2.2 Ki333.0 B / s

プッシュが完了すると、ポータル ページでミラー情報を確認できます。

イメージのプッシュは成功しました。プル機能をテストすることもできます。

 $ nerdctl rmi harbor .k8s .local / library / busybox : 1.35 .0
タグなし: harbor . k8s . local / library / busybox : 1.35 .0 @sha256 : 8 c40df61d40166f5791f44b3d90b77b4c7f59ed39a992fd9046886d3126ffa68
削除済み: sha256 : cf4ac4f​​c01444f1324571ceb0d4f175604a8341119d9bb42bc4b2cb431a7f3a5
$ nerdctl rmi ビジーボックス: 1.35 .0
タグなし: docker . io / library / busybox : 1.35 .0 @sha256 : 8 c40df61d40166f5791f44b3d90b77b4c7f59ed39a992fd9046886d3126ffa68
削除済み: sha256 : cf4ac4f​​c01444f1324571ceb0d4f175604a8341119d9bb42bc4b2cb431a7f3a5
$ nerdctl pull -- 安全でない- レジストリharbor . k8s . local / library / busybox : 1.35 .0
警告[ 0000 ] 「harbor.k8s.local」 HTTPS 証明書の検証をスキップします
harbor .k8s .local / library / busybox : 1.35 .0 : 解決済み|++++++++++++++++++++++++++++++++++++++++++|
インデックス- sha256 : 29f e0126b13c3ea2641ca42c450fa69583d212dbd9b7b623814977b5b0945726 : 完了|++++++++++++++++++++++++++++++++++++++++|
マニフェスト- sha256 : 8 cde9b8065696b65d7b7ffaefbab0262d47a5a9852bfd849799559d296d2e0cd : 完了|++++++++++++++++++++++++++++++++++++++++|
config - sha256 : d8c0f97fc6a6ac400e43342e67d06222b27cecdb076cbf8a87f3a2a25effe81c : 完了|++++++++++++++++++++++++++++++++++++++++|
レイヤー- sha256 : fc0cda0e09ab32c72c61d272bb409da4e2f73165c7bf584226880c9b85438e63 : 完了|++++++++++++++++++++++++++++++++++++++++|
経過時間: 0.7 合計: 2.2 Ki ( 3.2 KiB / s )
$ nerdctl 画像
リポジトリタグイメージID 作成プラットフォームサイズBLOB サイズ
.k8s .local / ライブラリ/ ビジーボックス1.35 .0 29f e0126b13c 17 linux / amd64 1.2 MiB 757.7 KiB

しかし、上記のように、nerdctlコマンドやctrコマンドを使ってHarborイメージリポジトリにアクセスするなど、containerdのみを使用する場合、証明書の検証をスキップしたり、CA証明書を設定したりしても証明書エラーが発生します。この場合、証明書の検証をスキップするか、証明書パスを指定する必要があります。

 #解決策1. -k パラメータを指定して証明書の検証をスキップします。
$ ctr イメージプル-- ユーザーadmin : Harbor12345 -k harbor.k8s.local / library / busybox : 1.35.0
#解決策2. CA 証明書と Harbor 関連の証明書ファイルへのパスを指定します
$ ctr イメージプル-- ユーザー管理者: Harbor12345 -- tlscacert cacrt ハーバーk8sローカル/ ライブラリ/ ビジーボックス: 1.35 .0

ただし、ctrctl を直接使用すると機能します。

 $ crictl pull harbor .k8s .local / library / busybox @sha256 : 29f e0126b13c3ea2641ca42c450fa69583d212dbd9b7b623814977b5b0945726
sha256 イメージ最新です: d8c0f97fc6a6ac400e43342e67d06222b27cecdb076cbf8a87f3a2a25effe81c

Kubernetes で使用する場合は、Harbor の認証情報を Secret としてクラスターに追加する必要があります。

 $ kubectl シークレットを作成しますdocker - registry harbor - auth --docker - server = https : //harbor.k8s.local --docker-username=admin --docker-password=Harbor12345 [email protected] -n default

次に、上記のプライベート イメージ リポジトリを使用して Pod を作成します。

 # テスト- ハーバー.yaml
apiバージョン: v1
種類: ポッド
メタデータ
名前: - レジストリ- テスト
仕様:
コンテナ
- 名前: テスト
イメージ: harbor.k8s.local / library / busybox : 1.35.0
引数:
- 寝る
- 「3600」
画像プルシークレット:
- 名前: - 認証

作成後、Pod がイメージを正常に取得できるかどうかを確認できます。

 $ kubectl でポッドハーバー- レジストリ- テストを記述します
名前: - レジストリ- テスト
名前空間: デフォルト
優先度: 0
ノード: node1 / 192.168.0.107
開始時間: 2022年7 7 18:52:39 + 0800
# ……
イベント:
タイプ理由年齢送信元 メッセージ
---- ------ ---- ---- -------
通常スケジュール10 default - スケジューラdefault / harbor - registry - test をノード 1 正常に割り当てました
通常のプル10 kubelet イメージ「harbor.k8s.local/library/busybox:1.35.0」 をプルしています
通常のプル5 kubelet イメージ「harbor.k8s.local/library/busybox:1.35.0」を4.670528883 正常にプルしました
通常5 で作成kubelet コンテナテストを作成
正常開始5 kubelet コンテナテストを開始

これは、プライベートイメージリポジトリが正常にセットアップされたことを示しています。プライベートプロジェクトと新しいユーザーを作成して、イメージのプル/プッシュを試してみてください。Harborには、イメージのコピー、Helm Chartパッケージのホスティングなど、他にも機能があります。実際に試して、Harborと公式の組み込みレジストリの違いを体験してください。