容器网络跟机房网络不在一个网络平面,一般不能互通,然则在混合环境中如何从 Kubernetes 集群外去访问 Kubernetes 集群里面的服务呢?本文将介绍该需求的多种实现方式。
本文由作者授权发布,未经许可,请勿转载。
作者:李岚清,网易杭州研究院云计算技术中心资深工程师
容器化是一个逐步推进的过程,不是一蹴而就的。肯定是有一部分业务部署在 Kubernetes 中,有一部分业务还是部署在裸机或者虚拟机上。那么我们如何从 Kubernetes 集群外去访问 Kubernetes 集群里面的服务呢?或者说,我们如何将 Kubernetes 集群内的服务暴露到 Kubernetes 集群外?
之所以存在这个问题,一个核心的原因是容器网络跟机房网络不在一个网络平面,一般情况是不能互通的(只能单向通,即容器可以通过 SNAT 访问机房网络)。
网易杭研自 2015 年就开始基于 Kubernetes 研发和打磨轻舟云原生平台,其中包括容器云组件,并曾探索容器与IaaS深度融合(以实现最优性能)的技术路线,对类问题此经验丰富。本文将基于网易轻舟团队研发经验,介绍如何通过多种方式来实现该需求。
HostNetwork
首先想到的最简单的方式是,将pod设置为hostNetwork的,即直接使用宿主机网络。hostNetwork类型的pod与宿主机共享网络协议栈。
apiVersion: v1
kind: Pod
metadata:
name: nginx