概述
Docker的流行激活了一直不温不火的PaaS,随着而来的是各类Micro-PaaS的出现,Kubernetes是其中最具代表性的一员,它是Google多年大规模容器管理技术的开源版本。本系列文章将逐一分析Kubernetes,本文说明 Kubernetes网络模型的特点和实现方式。
Kubernetes网络
Kubernetes采用扁平化的网络模型,每个Pod都有一个全局唯一的IP(IP-per-pod),Pod之间可以跨主机通信,相比于Docker原生的NAT方式来说,这样使得容器在网络层面更像虚拟机或者物理机,复杂度整体降低,更加容易实现服务发现,迁移,负载均衡等功能。
为了实现这个目标,Kubernetes中需要解决4个问题:
容器间通信
Pod是容器的集合,Pod包含的容器都运行在同一个Host上,并且拥有同样的网络空间。现在创建一个Pod,包含2个Container:
web-pod.yaml:
apiVersion: v1
kind: Pod
metadata:
name: webpod
labels:
name: webpod
spec:
containers:
- name: webpod80
image: jonlangemak/docker:web_container_80
ports:
- containerPort: 80
hostPort: 80
- name: webpod8080
image: jonlangemak/docker:web_container_8080
ports:
- containerPort: 8080
hostPort: 8080
Pod运行成功后,在其所在的Node上查询容器:
$ docker ps
CONTAINER ID IMAGE PORTS
63dc7e032ab6 jonlangemak/docker:web_container_8080
4ac1a5156a04 jonlangemak/docker:web_container_80
b77896498f8f gcr.io/google_containers/pause:0.8.0 0.0.0.0: