如何使用Azure DevOps将图像从JFrog Artifactory部署到Azure Kubernetes服务

问题描述

我使用Azure DevOps构建管道来构建并将docker映像推送到JFrog Artifactory。然后使用发行版定义中的Kubectl任务,使用下面的yaml文件将映像部署到Azure AKS环境中。

--- 
apiVersion: apps/v1
kind: Deployment
metadata: 
  labels: 
    app: webapplication-jfrog-deployment
  name: webapplication-jfrog-deployment
spec: 
  replicas: 2
  selector: 
    matchLabels: 
      app: webapplication-jfrog
  template: 
    metadata: 
      labels: 
        app: webapplication-jfrog
    spec: 
      containers: 
        - 
          image: #{JFrog_Login_Server_Name}#/webapplication:#{Version}#
          imagePullPolicy: Always
          name: webapplication-jfrog
          ports: 
            - 
              containerPort: 80
--- 
apiVersion: v1
kind: Service
metadata: 
  name: webapplication-jfrog-service
spec: 
  ports: 
    - 
      port: 80
  selector: 
    app: webapplication-jfrog
  type: LoadBalancer

部署上述yaml文件后,我在pod中收到以下错误:

无法提取图像“ xxxx-poc.jfrog.io/webapplication:xx”:rpc错误:代码=未知desc =来自守护程序的错误响应:获取https://xxxx-poc.jfrog.io/v2/webapplication/manifests/xx:未知:需要身份验证

从JFrog Artifactory将映像拉到Azure AKS环境时,发生此错误可能是身份验证问题。

所以,有人可以建议我如何将JFrog Artifactory中的映像部署到Azure Kubernetes服务中。

解决方法

对于任何私有注册表,您都需要创建一个docker-registry秘密,并在使用imagePullSecrets提取图像时指定该秘密。

  1. 创建秘密
kubectl create secret docker-registry artifactorycred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
  1. 在pod定义中指定秘密
apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: <your-private-image>
  imagePullSecrets:
  - name: artifactorycred

有关更多详细信息,请参见以下文档:

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...