网站开发赚钱吗 知乎,网络营销案例成功案例分析,媒介盒子,首钢建设二建设公司网站文章目录 Service 基础概念Service 类型#xff1a;Service 的工作流程#xff1a;东西流量#xff0c;南北流量NodePortLoadBalancer Service 基础概念
在 Kubernetes#xff08;K8s#xff09;中#xff0c;Service 是一个抽象的概念#xff0c;表示一个应用程序的逻… 文章目录 Service 基础概念Service 类型Service 的工作流程东西流量南北流量NodePortLoadBalancer Service 基础概念
在 KubernetesK8s中Service 是一个抽象的概念表示一个应用程序的逻辑集合和访问这些应用程序的策略。通常Service 都通过标签Label与 Pod 连接服务会自动为这些 Pod 创建端口映射关系有利于流量的负载均衡和服务发现。
Service 类型
k8s service主要包括以下几种类型 ClusterIP: ClusterIP 是默认的 ServiceType。该类型的 Service 只有一个集群内部的 IP 地址可以实现服务发现并允许 Pod 之间的通信。 NodePort: NodePort 会在每个 Node 上打开一个端口并将来自该端口的流量转发到 Service。这使得 Service 能够从集群外部访问。 LoadBalancer: LoadBalancer 会为 Service 创建一个外部负载均衡器并将 NodePort 服务和 ClusterIP 服务都映射到这个负载均衡器上默认从外面的请求只能访问到这个 load balancer。 ExternalName: ExternalName 是另一种特殊的 Service 类型与上述三种类型的 Service 不同它没有选择器没有定义任何端口也没有要代理的 IP 或者其他一切。只做一件事返回 CNAME 记录也就是别名记录。
Service 的工作流程
当在 Kubernetes 中创建一个 Service并且这个 Service 的选定了一个或多个 PodKubernetes 会为这个 Service 分配一个 IP 地址也称为集群 IP。Kubernetes 会在整个集群范围内为这个新的 Service 创建一个代理服务代理会负责将对该 Service 的所有请求转发到它管理的 Pod 上。当你的应用程序需要和其他服务交互时只需要使用这个 Service 的 IP 或者 DNS 名字进行通信Kubernetes 会自动将请求转发到正确的 Pod。
这种方式可以很好地将服务的消费者与服务的提供者进行解耦使得服务的消费者不需要关心具体的服务提供者是谁也无需关心服务提供者的数量、位置和状态等。
东西流量南北流量
在网络架构中术语南北流量和东西流量常常用来描述数据包在数据中心中的流动方向。 南北流量术语“南北流量”用于描述客户端与服务器之间或者是网络的入口和出口之间的流量。这种流量主要是从数据中心流出或流入的流量这就好比数据中心的南和北边界。在 KubernetesK8s环境中南北流量主要由 Kubernetes Ingress 或者 Service类型为 LoadBalancer 或 NodePort负责处理。例如一个从互联网发来的请求进入 Kubernetes 集群就是一种南北流量的例子。 东西流量术语“东西流量”用于描述在数据中心内部服务与服务之间的流量。这种流量主要是数据中心内部各个服务之间的互相通信就好比数据中心的东和西边界。在 Kubernetes 环境中东西流量主要由 Kubernetes Service 负责处理。例如一个 Pod 发送请求给另一个 Pod就是一种东西流量的例子。
这两种流量模式在微服务架构中尤其重要因为微服务架构中的服务数量可能上千个且每个服务间可能需要频繁通信。理解南北流量和东西流量的不同对于设计和管理 Kubernetes 网络策略、提高网络性能和安全性都有很大的帮助。 例如在这张图中有两个service分别管理商品服务和订单服务用户访问商品的时候商品服务需要去查询订单这时候蓝色的容器1内的商品服务就可以直接访问同为蓝色的service订单。同理绿色的容器订单服务可以访问绿色的商品service获取商品信息。
NodePort
关于k8s各种类型port参考文章http://t.csdnimg.cn/68crH
NodePort.yaml
apiVersion: v1
kind: Service
metadata:labels:app: test # service自己本身的标签name: nodeport-studynamespace: my-ns-nodeport
spec:externalTrafficPolicy: ClusterinternalTrafficPolicy: ClusteripFamilies:- IPv4ipFamilyPolicy: SingleStackports:- name: port1port: 81 # port字段定义了Service暴露给集群内部和外部的端口号protocol: TCPtargetPort: 80 # targetPort字段定义了Service将流量转发到后端Pod的容器端口号selector: # 匹配哪些pod会被service代理,所有匹配到以下标签的pod都可以通过该service进行访问app: test-appcity: shanghaiproject: k8s-studytype: NodePortnginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:labels:app: test-appproject: k8s-studycity: shanghainame: nginx-podnamespace: my-ns-nodeport
spec:containers:- image: nginx:1.9.1imagePullPolicy: IfNotPresentname: nginxports:- containerPort: 80name: nginx-portprotocol: TCPkb edit svc nodeport-study -n my-ns-nodeport 可以看到自动开启了一个和k8s node物理机绑定的端口。 通过nodePort物理机端口连接 kb exec -it toolbox-0 bash 从一个其它命名空间的pod中访问。这个时候需要用yaml配置的集群内端口81访问。
LoadBalancer
LoadBalancer.yaml
apiVersion: v1
kind: Service
metadata:name: loadbalancer-studynamespace: my-ns-nodeport
spec:ports:- name: port2port: 82 # port字段定义了Service暴露给集群内部和外部的端口号protocol: TCPtargetPort: 80 # targetPort字段定义了Service将流量转发到后端Pod的容器端口号selector:city: beijingproject: loadbalancer-studytype: LoadBalancernginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:labels:project: loadbalancer-studycity: beijingname: nginx-pod-loadbalancernamespace: my-ns-nodeport
spec:containers:- image: nginx:1.9.1imagePullPolicy: IfNotPresentname: nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: Fileports:- containerPort: 80name: nginx-portprotocol: TCP可以看到新创建处理的LoadBalancer类型的service有一个对外的EXTERNAL-IP。
这个ip是可以在集群外部直接访问。 集群内部访问。