There have been many innovations in networking and its models. Kubernetes is also one such product of innovations in networking. This networking model was developed with the purpose of running many distributed systems over a group of machines. There are many enterprises which use Kubernetes Networking and it is vital that people understand it in its true essence. The nature of shared or distributed systems makes networking a key component of the Kubernetes deployment process. It is important to understand this networking model because it will allow the users to correctly monitor, run and troubleshoot the applications which they run on this networking model.
Kubernetes is a vast topic and this article will give you a brief introduction to it. This will help people who are interested to know what is there in it and how and what more they need to know about it. It is important, keeping in mind that this is one of the most used networking models in the industry as of now. Most people know it as a network model and nothing more. There are many more things which demand attention. Further on, there are points that will describe the basics and some types and uses of this networking system for better understanding.
Basics of Kubernetes networking model
It is developed from basic core concepts which are combined together into great and extensive functionality. This is the section of the article which has lists of the concepts and provides an overview which helps to facilitate this discussion. There are many more things in Kuberenet than whatever is listed here. Below are some basic but very important parts of Kubernetes:
- Kubernetes API Servers
Kubernetes is opinionated when it comes to choosing how the Pods are networked. To be specific, we can say that there are few requirements on any network to be implemented. The requirements are stated below:
- The Pods can directly communicate with one another and they don’t need any network address translation (NAT) for that purpose.
- The nodes see themselves at the same IP as the other nodes see them.
After reading these requirements, most people are left with the following network problems that need to be solved:
- Container-to-Container Networking
- Pod-to-Pod Networking
- Pod-to-Service Networking
- Internet-to-Service Networking
These are the four problems that will also be discussed in the article and will make the readers understand the process to solve them.
Most of the time, network communication is looked that a virtual machine is interacting directly with an Ethernet Device.
If we talk about Linux, there are network namespaces with which all the running processes communicate. The network namespaces provide a logical networking stack with its own routes, network devices, and firewall rules. If we see a namespace for what it really is, then it is something which provides a brand new network stack, this is for all the processes which go on within a namespace.
A developer can create a namespace in Linux easily with the “IP” command. When a namespace is created, a mount point is added for the same and it resides under /var/run/netns. It allows the namespace to persist in the situation when no process is attached to it.
According to default settings, Linux assigns all the processes to the root network namespace. This is done to provide access to the external world. Pods are used inside Dockers as containers. All the Pod containers inside a docker have the same IP address and the port space which is assigned to them. The port space and IP address are assigned through a namespace assigned to the Pod. A single Pod is made up of many docker containers which reside within the namespace.
As far as Kubernetes is concerned, every Pod consists of a real IP address. Additionally, to communicate with each other, every Pod uses an IP address only. The only thing to understand and implement is how Kubernetes enables this kind of Pod-to-Pod communication using real IPs. It is also important to know whether the pod is deployed on the same physical node or entirely different nodes in the cluster. To start with, an instance of Pods residing on the same machine has been taken.
When it is seen through a pod’s point of view, it exists in its own Ethernet namespace. It requires you to communicate with every other namespace present on the same node. Users can connect the namespace using Linux Virtual Ethernet Device or veth pair. It consists of two virtual interfaces. They can spread over multiple namespaces.
In order to connect two pod namespaces, it is required to assign one side of the veth pair to the root network namespace. Also, the remaining side should be connected to the Pod’s network namespace. Each veth pair works like a patch cable. Its main function is to connect two sides to allow traffic to flow between them. This setup can be copied for as many Pods as the user wants on the machine.
A major drawback of pod-to-pod networking is that it is not at all durable. They will disappear and then reappear in response to scaling up or down. There are many other problems associated such as application crashes, node reboots and so on. These problems result in a change in the IP address without warning. To resolve this problem, services were built. The main function of a Kubernetes Service is to manage the state of a set of Pods. It also allows the user to track a set of Pod IP addresses that are dynamically changing over time.
Services play the role of abstraction over Pods. This helps in assigning a single virtual IP address to a group of Pod IP addresses. That traffic is addressed to the virtual IP address to a group of IP addresses of this Pod. It is way easier for users because it allows the set of Pods associated with a service to change at any time as per the user requires. The only requirement is to know the virtual IP address of the Service which is constant and does not change in any condition.
Until now, we just saw how traffic is routed inside a Kubernetes cluster. All things are good and they are helpful in many tasks too, but unfortunately, which can’t help meet sales targets. This is the situation when you have to expose the services to the external traffic for that purpose.
There are two things that get highlighted because of this,
- Getting traffic from the Kubernetes service from the internet
- Getting traffic from the Internet to the Kubernetes service.
Internet-to-Service networking is the part that deals with these two important problems. These need to be solved to meet the sales target in the real world. The application might work well and well but there is no use if there are no results that help the enterprise which is using this network model.
Kubernetes Networking is highly useful and has revolutionized the networking scenario to leaps and bounds. The prospect of this networking is wide and it will increase in the future years.