`
lykops
  • 浏览: 86384 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

使用kube-proxy让外部网络访问K8S service的ClusterIP

 
阅读更多

配置方式

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转发的两种模式

kube-proxy在转发时主要有两种模式Userspace和Iptables。如下图,左侧是Userspace模式,也是kube-proxy默认的方式,所有的转发都是通过kube-proxy软件实现的;右侧是Iptables模式,所有转发都是通过Iptables内核模块实现,而kube-proxy只负责生成相应的Iptables规则。
kube-proxy
使用Userspace模式(k8s版本为1.2之前默认模式),外部网络可以直接访问cluster IP。
使用Iptables模式(k8s版本为1.2之后默认模式),外部网络不能直接访问cluster IP。
从效率上看,Iptables会更高一些,但是需要Iptables version >=1.4.11,Iptables模式在k8s1.2版本放出。

service转发后端服务的四种类型

ClusterIP

此类型会提供一个集群内部的虚拟IP(与Pod不在同一网段),以供集群内部的pod之间通信使用。ClusterIP也是Kubernetes service的默认类型。
ClusterIP
为了实现图上的功能主要需要以下几个组件的协同工作:
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

LoadBalancer在NodePort基础上,K8S可以请求底层云平台创建一个负载均衡器,将每个Node作为后端,进行服务分发。该模式需要底层云平台(例如GCE)支持。

Ingress

Ingress,是一种HTTP方式的路由转发机制,由Ingress Controller和HTTP代理服务器组合而成。Ingress Controller实时监控Kubernetes API,实时更新HTTP代理服务器的转发规则。HTTP代理服务器有GCE Load-Balancer、HaProxy、Nginx等开源方案。
详细说明请见http://blog.csdn.net/liyingke112/article/details/77066814
这里写图片描述

service的三种端口

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上的容器内。

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    k8s安装文档和系统间集成ppt

    例如,使用Ingress资源实现外部网络对K8s服务的访问,或者通过API Gateway将多个Service暴露给外部。 5. **服务发现的实现机制**:Kube-proxy监听apiserver的事件,当Service或Pod发生变化时,自动更新iptables规则...

    七、kubernetes Service详解.pdf

    2. NodePort:在ClusterIP的基础上,为Service在每个节点上分配一个端口,使得Service可通过“节点IP:节点端口”的方式被外部访问。 3. LoadBalancer:通常用于云环境,创建外部负载均衡器并将其端口映射到Service的...

    CKA精品班架构师面试题汇总.docx

    Service 有多种类型,例如 ClusterIP(内部服务)、NodePort(暴露在节点端口上)、Headless Service(无头服务)、ExternalName(映射外部域名)和 LoadBalancer(云服务商的负载均衡器)。 9. 访问 Service 的...

    k8s+k8s+pod介绍与网络通讯+配合博文

    - Service网络:Service通过Cluster IP提供服务,Pod可以通过Service的DNS名或IP与其通信。外部网络通过NodePort或LoadBalancer访问Service。 6、网络图解 理解k8s网络架构的关键在于掌握以下几个层面: - 节点层面...

    k8s学习资料.zip

    - **Cluster IP**:每个Service有一个内部可访问的Cluster IP。 - **NodePort**:暴露Service在特定端口上,通过Node的IP和端口访问。 - **LoadBalancer**:在云环境中,可以将Service暴露为外部负载均衡器的端点...

    容器集群管理系统k8s从入门到精通

    常见的服务类型有ClusterIP(集群内部访问)、NodePort(通过Node的端口暴露服务)、LoadBalancer(云提供商的外部负载均衡器)和Headless Service(无中心代理的多Pod通信)。 在K8s中,存储可以通过Volume进行...

    K8S基础架构说明PDF说明 使用viso绘制

    Kubernetes在创建Service后,会为其分配一个集群内唯一的IP地址,即“ClusterIP”,这个IP在整个Service的生命周期中不会变更。Service为客户端屏蔽了底层Pod的寻址过程,而kube-proxy进程负责将对Service的请求转发...

    K8s架构1

    **Service**是K8s的一个重要概念,它提供了一个稳定的网络标识(Cluster IP)来访问Pod,即使Pod可能生老病死。K8s使用iptables或IPVS实现四层负载均衡,确保Service的稳定性。 **Controller**是K8s中的关键管理...

    k8sv1.20.2联网安装步骤.rar

    如果需要更改,可以在apiserver启动参数中配置--service-cluster-ip-range。 7. **验证网络连接**:安装完成后,通过创建Pod并检查它们之间的通信,或者通过Service对外暴露应用并测试外部访问,来验证网络配置是否...

    IT方面的面试笔试题目2022.pdf

    例如,通过 Service 类型设置,如 NodePort、LoadBalancer 或 ClusterIP 来实现服务暴露。 10. **Replica Set 和 Replication Controller**: Replica Set 和 Replication Controller 类似,两者都用于确保集群中...

    深入理解Service1

    在Kubernetes(K8s)集群中,Service是核心概念之一,它为一组相似的Pod提供了一个稳定的网络接口和负载均衡。Service的主要作用是抽象出Pod的生命周期,使得外部客户端可以稳定地与服务交互,而不受Pod的创建、销毁...

    新一代轻量级高性能K8s CNI介绍.pdf

    4. **Service Load Balancing**:确保服务流量能够到达上游kube-proxy,或者通过VIP(虚拟IP)实现本机服务负载均衡,使用DNAT(目的地网络地址转换)。 5. **NetworkPolicy Enforcement (optional)**:根据...

    手动搭建高可用的kubernetes 集群

    - 配置Ingress控制器,如Traefik,提供外部访问入口。 - Ingress控制器是暴露服务到集群外部的关键组件。 12. **日志收集**: - 使用阿里云日志服务或其他工具收集集群日志。 - 日志收集对于故障排查和性能优化...

    k8s-labs:Kubernetes实验室

    在本“Kubernetes实验室”(K8S-Labs)中,我们将深入探索Kubernetes(简称K8s)这一强大的容器编排系统。这个实验室主要针对201级别的学习者,意味着它适合那些对Kubernetes有一定了解但希望进一步深化实践技能的人...

    k8smemo:注意k8s我不记得了

    - **Cluster IP**:每个 Service 获得一个内部 IP,通过 kube-proxy 实现网络透明。 - **NodePort**:使服务可通过节点的端口对外暴露。 - **LoadBalancer**:结合云提供商的负载均衡器,将外部流量引入集群。 4...

    kubernetes培训PPT

    Kubernetes,通常缩写为k8s,是一种流行的开源容器编排系统,用于自动化容器化应用程序的部署、扩展和管理。这份“kubernetes培训PPT”提供了深入理解Kubernetes架构、核心概念以及实践操作的关键知识点。 1. **...

    Kubernetes(k8s)基础介绍

    总结来说,Kubernetes通过控制平面管理节点上的Pod,使用Deployment保证Pod的复制和更新,Service提供稳定的网络接口,Ingress则实现了外部访问的路由。理解这些核心概念是掌握Kubernetes的基础,随着深入学习,你还...

    【技术分享】Kubernetes落地实践.pptx

    6. **Kube-Proxy**:提供网络代理和负载均衡,实现 Service 的访问。 Kubernetes 中的主要概念包括: - **Service**:定义了如何访问 Pod,分为无状态服务、有状态服务和有状态集群服务。Service 可通过几种不同的...

    Kubernetes 入门教程.docx

    - **Kube-proxy**:实现 Kubernetes Service 的网络规则,早期版本使用 iptables,后来逐渐过渡到 ipvs 以提高性能。 #### 二、搭建 Kubernetes 集群 搭建 Kubernetes 集群的方法多种多样,常见的方法包括: - ...

Global site tag (gtag.js) - Google Analytics