k8s 如何支持私有鏡像


k8s如何支持私有鏡像

實現無密鑰編排

kubectl create secret docker-registry regsecret --docker-server=registry.cn-shenzhen.aliyuncs.com --docker-username=abc@aliyun.com --docker-password=xxxxxx --docker-email=abc@aliyun.com

--docker-server 參數為私有鏡像地址,阿里雲地址詳解:

公網:registry.cn-shenzhen.aliyuncs.com

vpc網:registry-vpc.cn-shenzhen.aliyuncs.com

經典網:registry-internal.cn-shenzhen.aliyuncs.com

其中:

regsecret: 指定密鑰的鍵名稱,可自行定義。

—docker-server:指定 Docker 倉庫地址。
—docker-username: 指定 Docker 倉庫用戶名。
—docker-password:指定 Docker 倉庫登錄密碼。
—docker-email:指定郵件地址(選填)。

yml 文件加入密鑰參數。

containers:
    - name: foo
      image: registry-internal.cn-hangzhou.aliyuncs.com/abc/test:1.0
imagePullSecrets:
    - name: regsecret

其中:

imagePullSecrets 是聲明拉取鏡像時需要指定密鑰。
regsecret 必須和上面生成密鑰的鍵名一致。
image 中的 Docker 倉庫名稱必須和 --docker-server 中的 Docker 倉庫名一致。
詳情信息參見官方文檔 使用私有倉庫。

實現無密鑰編排
為了避免每次使用私有鏡像部署時,都需要引用密鑰,您可將secret添加到namespace的default serviceaccount中,參見Add ImagePullSecrets to a service account。

首先找到前面創建的拉取私有鏡像的secret。

# kubectl get secret regsecret

NAME        TYPE                             DATA      AGE
regsecret   kubernetes.io/dockerconfigjson   1         13m

本例中采用手動配置的方式,修改命名空間的默認服務帳戶default,從而將此secret作為imagePullSecret。
首先創建一個sa.yaml配置文件,將服務賬號default的配置導入到該文件中。

  • kubectl get serviceaccounts default -o yaml > ./sa.yaml
    
    cat  sa.yaml
    
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      creationTimestamp: 2015-08-07T22:02:39Z
      name: default
      namespace: default
      resourceVersion: "243024"             ##注意該項
      selfLink: /api/v1/namespaces/default/serviceaccounts/default
      uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
    secrets:
    
    - name: default-token-uudgeoken-uudge
    

    執行vim sa.yaml命令,刪除resourceVersion,並增加拉取鏡像的密鑰配置項imagePullSecrets。修改后的配置如下。

  • apiVersion: v1
    kind: ServiceAccount
    metadata:
      creationTimestamp: 2015-08-07T22:02:39Z
      name: default
      namespace: default
      selfLink: /api/v1/namespaces/default/serviceaccounts/default
      uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
    secrets:
    
    - name: default-token-uudge
      imagePullSecrets:                 ##增加該項
    - name: regsecret
    

隨后用 sa.yaml配置文件替換default的服務賬號配置。
kubectl replace serviceaccount default -f ./sa.yaml
serviceaccount "default" replaced
以一個tomcat編排為例,執行kubectl create -f 命令創建。

apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: tomcat-deployment
  labels:
    app: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: registry-internal.cn-hangzhou.aliyuncs.com/abc/test:1.0              #替換為您自己的私有鏡像地址
        ports:
        - containerPort: 8080

若配置正常,Pod會啟動成功。然后執行 kubectl get pod tomcat-xxx -o yaml命令,你可看到以下配置項。

spec:
  imagePullSecrets:

- nameregsecretey


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM