自己管理イメージリポジトリからイメージをプルすると、異なるプロトコルや証明書認証の失敗により、イメージがプルされないことがあります。 このトピックでは、自己管理イメージリポジトリがHTTPプロトコルと自己署名証明書を使用する場合に、自己管理イメージリポジトリからイメージをプルしてポッドまたはImageCacheを作成する方法について説明します。
説明
自己管理イメージリポジトリからイメージをプルすると、ErrImagePullという名前のアラートイベントがトリガーされ、イメージをプルできない場合があります。 次の表は、Elastic Container Instanceとイメージリポジトリ間のネットワークが接続されていることを前提とした問題の原因と解決策を示しています。
シナリオ | 原因 | 解決策 |
自己管理イメージリポジトリはHTTPプロトコルを使用します。 | デフォルトでは、Elastic Container InstanceはHTTPS経由で画像をプルします。 異なるプロトコルを使用すると、イメージプル障害が発生します。 | HTTPプロトコルを使用してイメージリポジトリと対話するようにElastic Container Instanceを設定します。 |
自己管理イメージリポジトリはHTTPSプロトコルを使用しますが、自己署名証明書を使用します。 | 自己管理イメージリポジトリは、自己署名証明書を使用します。 これにより、リポジトリからイメージをプルするときに証明書の認証が失敗します。 その結果、画像を引っ張ることができない。 | 証明書認証をスキップするように設定します。 |
設定
イメージリポジトリからイメージをプルするときに自己管理イメージリポジトリがHTTPプロトコルまたは自己署名証明書を使用する場合、イメージプルの失敗を防ぐためにアノテーションを設定する必要があります。 次の表に、アノテーションを示します。
注釈 | 値の例 | 説明 |
k8s.aliyun.com/plain-http-registry | 「harbor *** .pre.com、192.168。XX。XX:5000、reg *** .test.com:80」 | 自己管理イメージリポジトリのアドレス。 HTTPプロトコルを使用する自己管理イメージリポジトリからイメージをプルする場合は、このアノテーションを指定する必要があります。 このように、Elastic Container InstanceはHTTPプロトコルを使用してイメージをプルします。 これは、異なるプロトコルによるイメージプル失敗を防止する。 |
k8s.aliyun.com/insecure-registry | 「harbor *** .pre.com、192.168。XX。XX:5000、reg *** .test.com:80」 | 自己管理イメージリポジトリのアドレス。 自己署名証明書を使用する自己管理イメージリポジトリからイメージをプルする場合、証明書認証をスキップするためにこの注釈を指定する必要があります。 これにより、証明書認証の失敗から生じるイメージプルの失敗を防ぎます。 |
異なるイメージリポジトリから複数のコンテナコンテナをプルする場合は、イメージリポジトリの複数のアドレスを指定できます。 複数の IP アドレスはカンマ (,) で区切ります。 例:
harbor *** .pre.com,192.168.XX.XX
イメージリポジトリのアドレスにポート番号が含まれている場合は、そのポート番号でアドレスを指定する必要があります。 たとえば、イメージリポジトリのアドレスが
192.168.XX.XX:5000/nginx:latest
の場合、パラメーターを192.168.XX.XX:5000
に設定します。
設定例
自己管理イメージリポジトリからイメージを引き出してポッドを作成する
ポッドの構成ファイルのメタデータに注釈を追加する必要があります。 たとえば、配置を作成するときは、spec.template.metadataセクションに注釈を追加する必要があります。
Elastic Container Instanceの機能を使用するには、Elastic Container Instanceベースのポッドを作成する場合にのみアノテーションを追加できます。 ポッドを更新するときにアノテーションを追加または変更しても、これらのアノテーションは有効になりません。
例1: 自己管理イメージリポジトリはHTTPプロトコルを使用します。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 4 selector: matchLabels: app: nginx template: metadata: name: nginx-test annotations: k8s.aliyun.com/plain-http-registry: "192.168.XX.XX:5000" # Specifies the address of the self-managed image repository to pull an image over the HTTP protocol. labels: app: nginx alibabacloud.com/eci: "true" spec: containers: - name: nginx image: 192.168.XX.XX:5000/test/nginx:latest
例2: 自己管理イメージリポジトリは、自己署名証明書を使用します。
apiVersion: apps/v1 kind: 配置 メタデータ: name: nginx ラベル: アプリ: nginx spec: レプリカ: 4 セレクタ: matchLabels: アプリ:nginx template: metadata: 名前: nginx-test アノテーション: k8s.aliyun.com/insecure-registry: "harbor *** .pre.com"# システムが自己管理イメージリポジトリからイメージを取得するときに証明書認証をスキップする自己管理イメージリポジトリのアドレスを指定します。 ラベル: アプリ:nginx alibabacloud.com/eci: "true" 仕様: containers: - name: nginx 画像: 港 *** .pre.com/test/nginx:latest
自己管理イメージリポジトリからイメージをプルしてImageCacheを作成する
例1: 自己管理イメージリポジトリはHTTPプロトコルを使用します。
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample annotations: k8s.aliyun.com/plain-http-registry: "192.168.XX.XX:5000" # Specifies the address of the self-managed image repository to pull an image over the HTTP protocol. spec: images: - 192.168.XX.XX:5000/test/nginx:latest imagePullSecrets: - default:secret1 - default:secret2 - kube-system:secret3 imageCacheSize: 25 retentionDays: 7
例2: 自己管理イメージリポジトリは、自己署名証明書を使用します。
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample annotations: k8s.aliyun.com/insecure-registry: "harbor***.pre.com" # Specifies the address of the self-managed image repository to skip certificate authentication when the system pulls images from the self-managed image repository. spec: images: - harbor***.pre.com/test/nginx:latest imagePullSecrets: - default:secret1 - default:secret2 - kube-system:secret3 imageCacheSize: 25 retentionDays: 7