Use a Docker Registry with authentication together with Kubernetes

Tiempo de lectura: 4 minutos

If your Docker Registry requires authentication with a username and password, you’ll need to provide those credentials to the Kubernetes cluster so it can access the registry images during deployment.

Here’s an example of how you can do it:

Using Docker Compose with Docker Registry with Authentication

Let’s assume your original Docker Compose looks like this:

version: '3'
services:
  webapp:
    image: your-repository/your-webapp-image:latest
    ports:
      - "8080:80"
  database:
    image: your-repository/your-database-image:latest
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: user
      MYSQL_PASSWORD: password

If the repository requires authentication, you can modify the docker-compose.yml to include authentication information:

version: '3'
services:
  webapp:
    image: your-repository/your-webapp-image:latest
    ports:
      - "8080:80"
    environment:
      REGISTRY_USER: your-user
      REGISTRY_PASSWORD: your-password
  database:
    image: your-repository/your-database-image:latest
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: user
      MYSQL_PASSWORD: password

Then, in your Dockerfile or your application’s startup script, you can use the REGISTRY_USER and REGISTRY_PASSWORD environment variables to authenticate before attempting to download the images.

Using Kubernetes with Docker Registry with Authentication

For Kubernetes, you’ll need to create a Secret object containing your Docker registry authentication credentials.

1. Create a Secret:

kubectl create secret docker-registry my-registry-secret \
  --docker-server=your-registry \
  --docker-username=your-user \
  --docker-password=your-password \
  --docker-email=your-email

Make sure to replace your-registry, your-user, your-password, and your-email with the correct values.

2. Modify Kubernetes Configurations:

Now, you can modify the Kubernetes configurations to use this secret when deploying the Pods. For the web application Deployment, you can do it as follows:

webapp-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: your-repository/your-webapp-image:latest
        ports:
        - containerPort: 80
      imagePullSecrets:
      - name: my-registry-secret

Make sure to change your-repository/your-webapp-image:latest to the correct name of your image.

With these settings, Kubernetes will use the secret you’ve created to authenticate when downloading images from the Docker registry during deployment.

html
Copy code

Verifying the Deployment

After deploying your application, you can use the following commands to check that your resources have been deployed successfully:

kubectl get pods
kubectl get services
kubectl get deployments

Done!

You have successfully migrated your Docker Compose system to Kubernetes! You can access your application through the IP address or service name provided by Kubernetes for the “webapp” service. Remember to adjust these steps according to the specific needs of your application.

Note: How to stop the created pods.

To stop (or more precisely, delete) pods in Kubernetes, you can use the kubectl delete pod command. Here are some ways to do it:

Stop a Single Pod:

kubectl delete pod POD_NAME

Replace POD_NAME with the name of the pod you want to stop.

Stop All Pods in a Specific Namespace:

kubectl delete pods --all -n NAMESPACE_NAME

Replace NAMESPACE_NAME with the name of the namespace where you want to stop all pods.

Stop All Pods in All Namespaces:

kubectl delete pods --all --all-namespaces

This command will delete all pods in all namespaces.

Keep in mind that deleting a pod in Kubernetes will attempt to create a new pod to maintain the desired state. If you want to stop a pod and prevent it from being replaced, you can scale the number of replicas in the deployment or replicaset to zero. Be cautious when doing this in production environments.

Scale Replicas to Zero to Stop a Deployment:

kubectl scale deployment DEPLOYMENT_NAME --replicas=0 -n NAMESPACE_NAME

Replace DEPLOYMENT_NAME and NAMESPACE_NAME with the apphtml
Copy code

Verifying the Deployment

After deploying your application, you can use the following commands to check that your resources have been deployed successfully:

kubectl get pods
kubectl get services
kubectl get deployments

Done!

You have successfully migrated your Docker Compose system to Kubernetes! You can access your application through the IP address or service name provided by Kubernetes for the “webapp” service. Remember to adjust these steps according to the specific needs of your application.

Note: How to stop the created pods.

To stop (or more precisely, delete) pods in Kubernetes, you can use the kubectl delete pod command. Here are some ways to do it:

Stop a Single Pod:

kubectl delete pod POD_NAME

Replace POD_NAME with the name of the pod you want to stop.

Stop All Pods in a Specific Namespace:

kubectl delete pods --all -n NAMESPACE_NAME

Replace NAMESPACE_NAME with the name of the namespace where you want to stop all pods.

Stop All Pods in All Namespaces:

kubectl delete pods --all --all-namespaces

This command will delete all pods in all namespaces.

Keep in mind that deleting a pod in Kubernetes will attempt to create a new pod to maintain the desired state. If you want to stop a pod and prevent it from being replaced, you can scale the number of replicas in the deployment or replicaset to zero. Be cautious when doing this in production environments.

Scale Replicas to Zero to Stop a Deployment:

kubectl scale deployment DEPLOYMENT_NAME --replicas=0 -n NAMESPACE_NAME

Replace DEPLOYMENT_NAME and NAMESPACE_NAME with the appropriate names.

Keep in mind that these operations will delete the pods, and if you have a replication controller configured, new pods will be created to maintain the desired number. If you want to completely stop an application, you might need to unmount or delete related resources such as services and deployments.

Another option is to modify the number of replicas within the pod and set them to 0:

metadata:
  name: webapp
spec:
  replicas: 0

And then apply it:

kubectl apply -f webapp-deployment.yaml

Leave a Comment