How to put containers network to the kubernetes YAML file

9/13/2017

For exmaple, I created network at docker

docker network create hello-rails

Then, I have mySQL, which is connected to this network

docker run -p 3306 -d --network=hello-rails --network-alias=db -e MYSQL_ROOT_PASSWORD=password --name hello-rails-db mysql

And also, I have rails server, which also rely on this network

docker run -it -p 3000:3000 --network=hello-rails -e MYSQL_USER=root -e MYSQL_PASSWORD=password -e MYSQL_HOST=db --name hello-rails benjamincaldwell/hello-docker-rails:latest

I want to write deployment on kubernetes for these two containers with YAML file. But I don't know, how to put network inside containers in the file. Do you have any recommendations?

-- Remzes
docker
kubernetes
mysql
networking
ruby-on-rails

1 Answer

9/13/2017

In Kubernetes you would solve this by creating two services.

The MySQL service will look something like this:

kind: Service
apiVersion: v1
metadata:
  name: mysql
spec:
  selector:
    app: mysql
  ports:
  - port: 3306

In your rails server, you can access the MySQL service by either using the mysql DNS name or using the MYSQL_SERVICE_HOST and MYSQL_SERVICE_PORT environment variables. There is no need to link the containers or specifying a network, as would be done in Docker.

Your Rails service will look like this:

kind: Service
apiVersion: v1
metadata:
  name: rails
spec:
  type: LoadBalancer
  selector:
    app: rails
  ports:
  - port: 3000

Notice the type: LoadBalancer, which specifies that this service will be published to the outside world. Depending on where you run Kubernetes, a public IP address will be automatically assigned to this service.

For more information, have a look at the Services documentation.

-- user3151902
Source: StackOverflow