Ballerina: build image and push to gcr.io via k8s plugin

7/22/2018

I'm using a simple ballerina code to build my program (simple hello world) with ballerinax/kubernetes annotations. The service is being compiled succesfully and accessible via the specific bind port from local host.

When configuration a kubernetes deployment I'm specifying the image build and push flags:

@kubernetes:Deployment {
    replicas: 2,
    name: "hello-deployment",
    image: "gcr.io/<gct-project-name>/hello-ballerina:0.0.2",
    imagePullPolicy: "always",
    buildImage: true,
    push: true
}

When building the source code:

ballerina build hello.bal

This is what I'm getting:

Compiling source
    hello.bal

Generating executable
    ./target/hello.balx
    @docker          - complete 3/3

    Run following command to start docker container:
    docker run -d -p 9090:9090 gcr.io/<gcr-project-name>/hello-ballerina:0.0.2

    @kubernetes:Service              - complete 1/1
    @kubernetes:Deployment           - complete 1/1
error [k8s plugin]: Unable to push docker image: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication

Note that when pushing it manually via docker on my local machine it works find and the new image is getting pushed.

What am I missing? Is there a way to tell ballerina about docker registry credentials via the kubernetes package?

-- Shikloshi
ballerina
docker
kubernetes

2 Answers

7/23/2018

Seems like a problem with Container Registry, you are not able to authenticate.

To authenticate to Container Registry, use gcloud as a Docker credential helper. To do so, run the following command:

gcloud auth configure-docker

You need to run this command once to authenticate to Container Registry. We strongly recommend that you use this method when possible. It provides secure, short-lived access to your project resources.

You can check yourself the steps for Container Registry Authentication Methods

-- Crou
Source: StackOverflow

7/23/2018

Ballerina doesn't support gcloud docker registry yet, but it supports dockerhub. Please refer sample6 for more info.

Basically, you can export docker registry username and password as environment variables.

Please create an issue at https://github.com/ballerinax/kubernetes/issues for track this.

-- Anuruddha Lanka Liyanarachchi
Source: StackOverflow