2020-05-19 17:41:04
kubernetes版本大于或者等于1.2时,外部网络(即非K8S集群内的网络)访问cluster IP的办法是:
修改master的/etc/kubernetes/proxy,把KUBE_PROXY_ARGS=”“改为KUBE_PROXY_ARGS=”–proxy-mode=userspace”
启动kube-proxy服务
在核心路由设备或者源主机上添加一条路由,访问cluster IP段的路由指向到master上。
kubernetes版本小于1.2时,直接添加路由
kube-proxy在转发时主要有两种模式Userspace和Iptables。如下图,左侧是Userspace模式,也是kube-proxy默认的方式,所有的转发都是通过kube-proxy软件实现的;右侧是Iptables模式,所有转发都是通过Iptables内核模块实现,而kube-proxy只负责生成相应的Iptables规则。
使用Userspace模式(k8s版本为1.2之前默认模式),外部网络可以直接访问cluster IP。
使用Iptables模式(k8s版本为1.2之后默认模式),外部网络不能直接访问cluster IP。
从效率上看,Iptables会更高一些,但是需要Iptables version >=1.4.11,Iptables模式在k8s1.2版本放出。
ClusterIP:提供一个集群内部的虚拟IP以供Pod访问。
NodePort:在每个Node上打开一个端口以供外部访问。
LoadBalancer:通过外部的负载均衡器来访问。
ClusterIP
此类型会提供一个集群内部的虚拟IP(与Pod不在同一网段),以供集群内部的pod之间通信使用。ClusterIP也是Kubernetes service的默认类型。
为了实现图上的功能主要需要以下几个组件的协同工作:
apiserver:在创建service时,apiserver接收到请求以后将数据存储到etcd中。
kube-proxy:k8s的每个节点中都有该进程,负责实现service功能,这个进程负责感知service,pod的变化,并将变化的信息写入本地的iptables中。
iptables:使用NAT等技术将virtualIP的流量转至endpoint中。
NodePort
NodePort模式除了使用cluster ip外,也将service的port映射到每个node的一个指定内部port上,映射的每个node的内部port都一样。
为每个节点暴露一个端口,通过nodeip + nodeport可以访问这个服务,同时服务依然会有cluster类型的ip+port。内部通过clusterip方式访问,外部通过nodeport方式访问。
loadbalance
只能使用在在gce这样的云环境上。
port
service暴露在cluster ip上的端口,:port 是提供给集群内部客户访问service的入口。
nodePort
nodePort是k8s提供给集群外部客户访问service入口的一种方式,:nodePort 是提供给集群外部客户访问service的入口。
targetPort
targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。
port、nodePort总结
总的来说,port和nodePort都是service的端口,前者暴露给集群内客户访问服务,后者暴露给集群外客户访问服务。从这两个端口到来的数据都需要经过反向代理kube-proxy流入后端pod的targetPod,从而到达pod上的容器内。
k8s(kubernetes)部署三个节点的redis cluster
05-24
kubernetes集群使用Ceph
03-20
使用zabbix监控k8s(kubernetes)异常POD
03-13
Docker命令行参考(38) – docker service inspect显示服务详细信息
02-12
Docker命令行参考(39) – docker service scale缩放服务
02-12
使用 Haproxy + Keepalived 构建基于 Docker 的高可用负载均衡服务(一)
05-25
配置HAproxy实现动静态请求分离
04-20
配置haproxy在http请求头添加后端用户真实IP
07-05
kubernetes 应用故障的一些定位方法
02-17
kubernetes主机间curl cluster ip时通时不通
04-03
kubernetes集群中service的滚动更新
02-17
GitHub是如何无缝迁移到kubernetes的?
04-20
在kubernetes上使用Sateful Set部署RabbitMQ集群
02-15
解决kubernetes 1.6.4 Dashboard无法访问的问题
04-20
k8s与flannel网络原理
03-02
k8s的flannel安装报错Failed to create SubnetManager: error retrieving pod spec解决
02-17
设计模式——适配器模式
05-30
HAproxy常用配置介绍,ACL详解
04-15
Ideapad Y450/Y550/Y650 一键影音功能的介绍及应用
07-21
Lenovo settings下载及使用介绍
07-06