全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

使用自建仓库

最近更新时间:2024-04-23 16:43:55

当您使用容器实例从自建仓库中拉取镜像时,可能会遇到如下问题:

  • 不能解析自建仓库的域名

  • 因协议不同或者证书认证失败而导致镜像拉取失败

本文介绍如何配置容器实例解析自建仓库的域名,以及在自建镜像仓库采用HTTP协议和使用自签发证书的情况下,如何拉取自建镜像仓库中的镜像来创建容器实例。

场景1:容器实例解析自建仓库域名

您可以通过vk维度/pod维度两种配置方式,来更新容器实例底层的DNS相关配置,实现对自建镜像仓库的域名解析。

vk维度配置通过环境变量指定,对vk所管理的所有容器实例生效:

环境变量

含义

是否必填

KCI_HOST_ALIASES

若需使用自建镜像仓库,在vk级别配置实例hostAliases,生效于该vk所管理的实例底层系统内,用于解析镜像仓库地址,必须为json字符串格式(参考Adding additional entries with hostAliases

KCI_DNS_CONFIG

若需使用自建镜像仓库,在vk级别配置实例dnsconfig,生效于该vk所管理的实例底层系统内,用于解析镜像仓库地址,必须为json字符串格式(参考Pod’s DNS Config

Yaml示例如下:

...
          env:
            - name: VKUBELET_POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: TEMP_AKSK_CM
              value: user-temp-aksk
            - name: KCI_CLUSTER_ID
              value: ${cluster_id} 
            - name: KCI_SUBNET_ID
              value: ${subnet_id}
            - name: KCI_SECURITY_GROUP_IDS
              value: ${security_group_ids} 
            # 使用自建镜像仓库时,指定该虚拟节点所管理的实例底层系统的hostAliases配置
            - name: KCI_HOST_ALIASES
              value: '[{"ip":"1.2.3.4","hostnames":["www.privaterepo1.com"]},{"ip":"2.3.4.5","hostnames":["www.privaterepo2.com"]}]'
            # 使用自建镜像仓库时,指定该虚拟节点所管理的实例底层系统的dnsconfig配置
            - name: KCI_DNS_CONFIG
              value: '{"nameservers":["1.1.1.1"],"options":[{"name":"ndots","value":"2"},{"name":"timeout","value":"3"}],"searches":["test1.com"]}'
...  

Pod维度通过 annotation 配置:

Annotation Key

Annotation Value示例

是否必填

描述

k8s.ksyun.com/kci-dns-config

'{"nameservers":["1.1.1.1"],"options":[{"name":"ndots","value":"2"},{"name":"timeout","value":"3"}],"searches":["test1.com"]}'

使用自建镜像仓库时,若未在vk维度配置,可在实例维度配置dnsconfig,生效于实例底层系统内,用于解析镜像仓库地址,必须为json字符串格式(参考Pod’s DNS Config

k8s.ksyun.com/kci-host-aliases

'[{"ip":"1.2.3.4","hostnames":["www.privaterepo1.com"]},{"ip":"2.3.4.5","hostnames":["www.privaterepo2.com"]}]'

使用自建镜像仓库时,若未在vk维度配置,可在实例维度配置hostAliases,生效于实例底层系统内,用于解析镜像仓库地址,必须为json字符串格式(参考Adding additional entries with hostAliases

Yaml示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-rbkci
  namespace: default
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
        annotations:
            k8s.ksyun.com/kci-dns-config: '{"nameservers":["1.1.1.1"],"options":[{"name":"ndots","value":"2"},{"name":"timeout","value":"3"}],"searches":["test1.com"]}'   #实例维度配置dnsconfig,生效于实例底层系统内,用于解析镜像仓库地址
            k8s.ksyun.com/kci-host-aliases: '[{"ip":"1.2.3.4","hostnames":["www.privaterepo1.com"]},{"ip":"2.3.4.5","hostnames":["www.privaterepo2.com"]}]'   #实例维度配置hostAliases,生效于实例底层系统内,用于解析镜像仓库地址
        labels:
            app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
      tolerations:
      - key: rbkci-virtual-kubelet.io/provider
        value: kingsoftcloud
        effect: NoSchedule

场景2:容器实例支持采用HTTP协议和使用自签发证书的镜像仓库

功能说明

拉取自建镜像仓库中的镜像时,可能会出现镜像拉取失败的问题。在保证容器实例与镜像仓库网络连通性的前提下,问题原因和解决方法如下:

场景

原因

解决方法

自建镜像仓库采用HTTP协议

容器实例默认使用HTTPS协议拉取镜像,协议不同导致镜像拉取失败

配置容器实例使用HTTP协议与镜像仓库进行交互

自建镜像仓库采用HTTPS协议,但使用的证书是自签发证书

使用自签发证书的情况下,拉取镜像时无法通过证书认证,导致镜像拉取失败

配置跳过证书认证

配置说明

拉取自建镜像仓库中的镜像时,如果镜像仓库采用HTTP协议,或者使用自签发证书,需配置Annotation来避免镜像拉取失败。相关Annotation说明如下:

Annotation Key

Annotation Value示例

描述

k8s.ksyun.com/kci-http-registry

192.168.xx.xx:5000

使用HTTP协议的自建镜像仓库中的镜像创建容器实例时,需配置该Annotation使得容器实例使用HTTP协议拉取镜像,避免因协议不同而导致镜像拉取失败。支持配置多个仓库域名或IP,以逗号隔开。

k8s.ksyun.com/kci-insecure-registry

harbor.example.com

使用自签发证书的自建镜像仓库中的镜像创建容器实例时,需配置该Annotation来跳过证书认证,避免因证书认证失败而导致镜像拉取失败。支持配置多个仓库域名或IP,以逗号隔开。

说明:

  • 如果有多个容器的镜像需要从不同的镜像仓库中拉取,支持填写多个镜像仓库地址,各个地址之间采用半角逗号隔开,例如harbor.example.com,192.168.XX.XX

  • 如果镜像仓库地址有端口号,则需要带上端口号,例如:镜像地址为192.168.XX.XX:5000/nginx:latest,则Annotation的值需设置为192.168.XX.XX:5000

配置示例

配置时,Annotation请添加在Pod的metadata下,例如配置Deployment时,Annotation需添加在spec>template>metadata下。

自建镜像仓库采用HTTP协议

Yaml示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-rbkci
  namespace: default
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      annotations:
        k8s.ksyun.com/kci-http-registry: 192.168.xx.xx:5000  # 配置使用HTTP协议的镜像仓库地址
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: 192.168.xx.xx:5000/library/nginx:latest
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
      tolerations:
      - key: rbkci-virtual-kubelet.io/provider
        value: kingsoftcloud
        effect: NoSchedule
自建镜像仓库采用自签发证书

Yaml示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-rbkci
  namespace: default
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      annotations:
        k8s.ksyun.com/kci-insecure-registry: kevin.harbor.com  # 配置使用自签发证书的镜像仓库地址
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: kevin.harbor.com/library/nginx:v1
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
      tolerations:
      - key: rbkci-virtual-kubelet.io/provider
        value: kingsoftcloud
        effect: NoSchedule

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈