Skip to content

Introduction to Kubernetes Networking

Estimated time to read: 4 minutes

  • Originally Written: February, 2020

With every new technology comes a learning curve and Kubernetes is no exception. In this four-blog series we will look inside the blackbox that is Kubernetes networking to address the following topics:

1. Container to Container Communications

The smallest object we can deploy in Kubernetes is the pod, however within each pod you may want to run multiple containers. A common usecase for this is a helper where a secondary container helps a primary container with tasks such as pushing and pulling data.

Container to container communication within a K8s pod uses either the shared file system or the localhost network interface.

We can test this by using the K8s provided example, two-container-pod, and modifying it slightly.

https://k8s.io/examples/pods/two-container-pod.yaml

When we deploy this pod we can see two containers, nginx-container and debian-container. I’ve created two separate options to test, one with a shared volume, and one without a shared volume but using localhost instead.

Shared Volume Communication


When we use the shared volume, Kubernetes will create a volume in the pod which will be mapped to both containers. In the nginx-container, files from the shared volume will map to the /usr/share/nginx/html directory, while in the debian-container files will map to the /pod-data directory. When we update the index.html file from the Debian container, this change will also be reflected in our Nginx container, thereby providing a mechanism for our helper (Debian) to push and pull data to and from Nginx.

Localhost Communication


In the second scenario shared volume has been removed from the pod and a message has been written in the index.html file which only resides in the Nginx container. As previously mentioned, the other method for multiple containers to communicate within a pod is through the localhost interface and the port number to which they’re listening.

In this example Nginx is listening on port 80, therefore when we run the curl https://localhost command from the Debian container we can see that the index.html page is served back to us from Nginx.

Here’s the nginx-container showing the contents of the index.html file.

Confirmation that we’re receiving the file when we Curl from the debian-container

References

Next Topic

Pod-to-Pod Communication

Comments