skip to Main Content

I was able to publish a Docker image using the jenkins pipeline, but not pull the docker image from the nexus.I used kaniko to build the image.

deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: test-app
  name: test-app
  namespace: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test-app
  template:
    metadata:
      labels:
        app: test-app
    spec:
      hostNetwork: false
      containers:
        - name: test-app
          image: ip_adress/demo:0.1.0
          imagePullPolicy: Always
          resources:
            limits: {}
      imagePullSecrets:
        - name: registrypullsecret

service.yml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: test-app
  name: test-app-service
  namespace: jenkins
spec:
  ports:
    - nodePort: 32225
      port: 8081
      protocol: TCP
      targetPort: 8081
  selector:
    app: test-app
  type: NodePort

Jenkins pipeline main script

stage ('Build Image'){
        container('kaniko'){
                    script {
            sh '''
            /kaniko/executor --dockerfile `pwd`/Dockerfile --context `pwd` --destination="$ip_adress:8082/demo:0.1.0" --insecure --skip-tls-verify
             '''
          }

stage('Kubernetes Deployment'){
            container('kubectl'){
                 withKubeConfig([credentialsId: 'kube-config', namespace:'jenkins']){
                     sh 'kubectl get pods'
                     sh 'kubectl apply -f deployment.yml'
                     sh 'kubectl apply -f service.yml'
                 }

I’ve created a dockerfile of a Spring boot Java application. I’ve sent the image to Nexus using the Jenkins pipeline, but I can’t deploy it.

kubectl get pod -n jenkins

test-app-… 0/1 ImagePullBackOff

kubectl describe pod test-app-.....

Error from server (NotFound): pods "test-app-.." not found

docker pull $ip_adress:8081/repository/docker-releases/demo:0.1.0 “`

Error response from daemon: Get "https://$ip_adress/v2/": http:server
gave HTTP response to HTTPS client

ip adress: private ip address

How can I send as http?

2

Answers


  1. First of all try to edit /etc/containerd/config.toml and add your registry ip:port like this { "insecure-registries": ["172.16.4.93:5000"] }

    if there was still a problem, add your nexus registry credential to yaml kubernetes file like link below
    https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

    Login or Signup to reply.
  2. If we want to use a private registry to pull the images in kubernetes we need to configure the registry endpoint and credentials as a secret and use it in pod deployment configuration.

    Note: The secrets must have to be in the same namespace as Pod

    Refer this official k8 document to know more details about configuring private registry in Kubernetes

    In your case you are using secret registrypullsecret . So check the secret one more time whether it is configured properly or not. If not, try following the documentation mentioned above.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search