openshift三种网络支持方式概述

问题
客户端在外部访问容器怎么实现呢?

1.HostPort/HostNetwork
通过宿主机的iptables给每个容器设置映射访问,如容器里面的80端口映射到宿主机的8080端口,缺点是:当你的容器非常多,而且每个容器都有服务要对外映射的时候,你会写很多iptables,不易于维护,致命点是宿主机挂掉了,而你没做冗余,那么你的服务就下线了

2.NodePort
这个是基于老版k8s的基础上做的,提供了一个service服务,即给你的容器做浮动IP,不使用docker自带的网络,自己设置子网,在docker集群内部,通过该VIP就可以访问到你的服务;在对外提供服务的时候,只需要将该VIP与宿主机映射端口即可,缺点:需要在每一台宿主机上都写上一样的iptables

oc edit svc myapp
spec: 
  clusterIP: 172.30.207.79
  ports:   
- name: 8080-tcp     
  port: 8080     
  protocol: TCP     
  targetPort: 8080     
  nodePort: 30800 #端口范围:30000-32767   
  selector:     
  app: hello     
  deploymentconfig: myapp 
  sessionAffinity: None   
  type: NodePort 
通过上述配置后,既可通过访问集群任意一台宿主机的30800端口去获取服务

3.Openshift Routes
这种方式是Openshift首选的方式,这种方式将service与一个全局唯一的域名绑定,使用oc expose命令实现,Router使用的是Haproxy容器。缺点:只能支持http协议,这一点是红帽设计初衷的时候决定,他们觉得容器对外只提供web访问就好了,其他的容器内部自己实现交互

oc expose svc myapp
oc get svc myapp
通过上述命令,客户端可以通过访问域名的方式获取服务 

你可能感兴趣的:(openshift三种网络支持方式概述)