(七)Kubernetes Service

官网链接 https://kubernetes.io/zh/docs/concepts/services-networking/service/
service是将一组运行Pods上的应用程序公开为网络服务的抽象方法
为什么要有service
pod具有不停销毁、创建的特征,每个Pod又有自己分配的IP,Pod的创建、销毁意味着IP不停的变更,前端如何跟踪IP地址变得非常困难,service就是来解决这个问题的。它可以实现监控Pod的变化,并对外提供一个固定的访问入口(负载均衡的入口);
Endpoints
通过endpoints,我们可以知道service后面关联的pods情况;endpoints会随着pods的变化而变化。service和pod通过labels关联。
kubectl get endpoints #查看endpoints
Service的意义
防止Pod失联
定义一组Pod的访问策略(负载均衡,默认是轮询)
支持ClusterIP、NodePort、LoadBalancer三种类型
官网链接 https://kubernetes.io/zh/docs/tutorials/services/source-ip/#type-clusterip-%e7%b1%bb%e5%9e%8b-services-%e7%9a%84-source-ip
ClusetrIp :默认分配一个集群内部可以访问的的虚拟IP(VIP)

NodePort:在每个node上分配一个端口作为外部访问入口,端口建议固定,不要随机分配(可以通过每个节点外网IP访问,使用SLB绑定节点IP实现负载均衡)。

LoadBalancer:工作在特定的Cloud provider上。例如google cloud,AWS, OpenStack (不用我们自己配置SLB 里面的Node服务器,自己接入负载均衡)

service底层实现主要有Iptables和IPVS两种网络模式

Service代理
在kubernetes集群中,每个node运行一个kube-proxy进程。kube-proxy负责为Service实现一种VIP(虚拟IP)的形式。
cat /opt/kubernetes/cfg/kube-proxy.conf #node上设置代理模式
userspace代理模式

IpTables代理模式

相对于userspace模式,iptables模式在检测到分配的第一个pod链接失败后,会自动分配其他pod进行重试。
iptable会创建很多规则(更新,非增量)
iptable会从上到下逐条匹配(延迟大)
iptables -L #查看规则
IPVS代理模式

相对于iptables模式,iptables 是面向用户端口层面 IPVS模式 直接面向内核 效率更高,kube-proxy重定向通信延迟更短,同步代理规则性能更好,
ipvsadm -ln #查看ipvs规则
service.yaml

kubectl expose deployment nginx --type=NodePort --port=80 --target-port=80 --name=nginx-service -o yaml --dry-run #生成yaml
apiVersion: v1 #service api版本
kind: Service #设置为service
metadata: #元数据
  creationTimestamp: null
  labels:
    run: nginx #标签
  name: nginx-service #service名称
spec:
  ports:
  - port: 80 #service端口,用于集群内部访问的端口
    protocol: TCP #协议tcp、udp
    targetPort: 80 #容器内部应用的端口,例如ngin默认端口是8080
    nodePort=30001 #设置nodeport端口,限定在30000-50000之间
  selector:
    run: nginx #关联的标签
  type: NodePort #ClusterIP、NodePort、LoadBalancer三种类型
status:
  loadBalancer: {}

多端口Service
使用多端口时候,必须提供所有端口的名称,使他们无歧义。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - name: http #端口name1
      protocol: TCP
      port: 80
      targetPort: 9376
    - name: https #端口name2
      protocol: TCP
      port: 443
      targetPort: 9377

集群内部DNS服务
Core DNS 是目前kubernetes系统内部默认的DNS服务。

在使用busybox 测试DNS 是 假设不是同一个namespace 可以使用 后面 svc.cluster.local 可以不填写。

原文地址:https://blog.51cto.com/1014810/2484784

时间: 2024-07-30 19:44:41

(七)Kubernetes Service的相关文章

kubernetes service 和 ingress

一 总述 1 service 作用 POD 中运行的容器存在动态.弹性的变化(容器的重启IP地址会变化),因此便产生了service,其资源为此类POD对象提供一个固定.统一的访问接口及负载均衡能力,并借助DNS系统的服务发现功能,解决客户端发现容器难得问题 service 和POD 对象的IP地址在集群内部可达,但集群外部用户无法接入服务,解决的思路有:1 在POD上做端口暴露(hostPort)2 在工作节点上公用网络名称空间(hostNetwork)3 使用service 的NodePor

Android总结七(Service)

一.服务 1.什么是服务? Service是一个可以长期在后台运行, 没有界面的组件. 它可以被其他组件绑定, 可以在进程之间通信. 2.创建Service 定义类继承Service, 实现回调函数. 在清单文件中声明<service> 3.启动服务,停止服务 在其他组件中可以调用startService()方法启动一个服务, 可以调用stopService()方法停止一个服务 在服务中可以使用stopSelf()方法停止服务.如果stopSelf()方法不传任何参数, 就是立即停止, 无论是

浅谈 kubernetes service 那些事(上篇)

欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.问题 首先,我们思考这样一个问题: 访问k8s集群中的pod, 客户端需要知道pod地址,需要感知pod的状态.那如何获取各个pod的地址?若某一node上的pod故障,客户端如何感知? 二.k8s service 什么是service 是发现后端pod服务: 是为一组具有相同功能的容器应用提供一个统一的入口地址: 是将请求进行负载分发到后端的各个容器应用上的控制器. 对service的访问来源 访问service的请求来源有两种:k8s集

Docker Kubernetes Service 网络服务代理模式详解

Docker Kubernetes  Service 网络服务代理模式详解 Service service是实现kubernetes网络通信的一个服务 主要功能:负载均衡.网络规则分布到具体pod 注:kubernetes deployment服务分配服务器负载均衡VIP只能NODE节点单独访问,这里需要外网用户可以放问到容器内,这里就需要用到service. 网络代理模式 kube-proxy v1.0中只支持userspace模式,在v1.1中,添加了iptables代理,在v1.2开始ip

ASP.NET Core在Azure Kubernetes Service中的部署和管理

目录 ASP.NET Core在Azure Kubernetes Service中的部署和管理 目标 准备工作 注册 Azure 账户 AKS文档 进入Azure门户(控制台) 安装 Azure Cli 安装 Docker 进入正题 资源组 创建资源组 删除资源组 容器注册表 Azure Container Register (ACR) 创建 ACR 登录 ACR 服务主体 service principle 创建服务主体 给服务主体配置 ACR 的pull权限 K8s服务集群 Azure Ku

浅谈 kubernetes service 那些事

说明 关于 k8s 服务这一块知识,我之前的博文中有些实例应用和说明.下面分享几位大佬的文章,加固对 service 这块有更深的理解- 分享 浅谈 kubernetes service 那些事 本文详细介绍了 k8s service 实现原理和新特性,值得深度拜读和理解- K8s Deployment YAML 名词解释 本文对 Deployment yaml 名词进行了详细解释,值得参考学习- 使用 k8s 部署你的第一个应用: Pod,Deployment 与 Service 通过简单的

CoreDNS for kubernetes Service Discovery

一.CoreDNS简介 Kubernetes包括用于服务发现的DNS服务器Kube-DNS. 该DNS服务器利用SkyDNS的库来为Kubernetes pod和服务提供DNS请求.SkyDNS2的作者,Miek Gieben,创建了一个新的DNS服务器,CoreDNS,它采用更模块化,可扩展的框架构建. Infoblox已经与Miek合作,将此DNS服务器作为Kube-DNS的替代品. CoreDNS利用作为Web服务器Caddy的一部分而开发的服务器框架.该框架具有非常灵活,可扩展的模型,用

[k8s集群系列-10]Kubernetes Service暴露方式及Traefik使用

访问部署在kubernetes集群中服务,有两种类型: 集群内部实现访问 集群外部实现访问 但是不管是集群内部还是外部访问都是要经过kube-proxy的 集群内部实现访问 ClusterIP Clusterip是集群内部的私有ip,在集群内部访问服务非常方便,也是kuberentes集群默认的方式,直接通过service的Clusterip访问,也可以直接通过ServiceName访问.集群外部则是无法访问的. 示例 **创建nginx服务,提供web服务z nginx-ds.yaml api

Kubernetes Service

Service 的作用 参考链接 虽然每个Pod都有自己的IP地址,但即使这些IP地址不能长期保持稳定.这导致了一个问题:如果一些Pod(称为它们的后端)为Kubernetes集群内的其他Pod(我们称之为前端)提供了功能,那么这些前端如何发现并跟踪哪些后端位于该集合中? 通过Service. Kubernetes的 service是一个抽象概念,它定义了Pod的逻辑集合以及访问它们的策略 - 有时称为微服务.service所针对的Pod集(通常)由标签选择器决定(请参阅下面为什么您可能需要没有