openshift三种网络支持方式概述

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

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

2.NodePort
这个是基于老版k8s的基础上做的,提供了一个service服务,即给你的容器做浮动IP<VIP>,不使用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
通过上述命令,客户端可以通过访问域名的方式获取服务 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容