草庐IT

k8s之Service

江南道人 2023-10-26 原文

目录

1、Service存在的意义:

2、Pod与Service的关系:

1、 Service通过标签关联一组Pod

2.2,service多端口定义:

3、Service常用的三种类型

3.1 ClusterIP:

3.2 NodePort:


1、Service存在的意义:

service引入主要是解决pod的动态变化,提供统一的访问入口:
1、防止pod失联,准备找到提供同一服务的pod(服务发现)
2、定义一组Pod的访问策略(负载均衡)
即访问流程应该是
在前端访问后端时,如果直接绑定pod的ip,当pod进行更新时,pod的ip也会变化,前端无法动态的感知后端的变化。
同时,还面临多个pod副本如何对外统一访问的问题
这里,就需要用到前面的服务发现与负载均衡的概念,

2、Pod与Service的关系:

1、 Service通过标签关联一组Pod

2、Service为一组Pod提供负载均衡能力 
通过
kubectl get ep
可以查看service与他绑定的pod
注意:service与pod绑定是标签绑定,所以标签一定要正确,查看pod标签的命令为
kubectl get pods --show-labels
在service中由selector绑定
一组pod可以定义多组service,deployment也是。他们都是独立的资源,没有依赖性

2.2,service多端口定义:

在实际场景中,可能出现一组pod内运行多容器,里面运行的端口可能是多端口,如图
加入这个pod中有两个端口需要访问,一个80一个12345.这时候就需要使用到service的多端口功能
示例yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: web2
spec:
  ports:
  - port: 80
    name: http
    protocol: TCP
    targetPort: 80
  - port: 12345
    name: metrics
    protocol: TCP
    targetPort: 12345
  selector:
    app: nginx
与单端口service 不同,多端口的service每个端口要有name名,否则创建失败
创建成功,有两端口监听

3、Service常用的三种类型

service一共有三种类型,一般用户未配置时service会默认使用clusterIP

3.1 ClusterIP:

默认,分配一个稳定的IP地址,即VIP,只能在集群内部访问。
一般k8s集群中不同项目沟通一般使用clusterip

3.2 NodePort:

在每个节点上启用一个端口来暴露服务,可以在集群 外部访问。也会分配一个稳定内部集群IP地址。
 访问地址:<任意NodeIP>: 默认NodePort端口范围:30000-32767
示例模块
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30009
  selector:
    app: web
nodeport演示
创建service的yaml,绑定已经运行的pod
vi service-nodeport
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: web3
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
执行yaml
kubectl apply -f service-nodeport
查看k8s的svc,可以看见端口已经暴露
kubectl get svc
访问node的ip加这个生成的端口,访问成功
同时,当用户不指定暴露后的端口,端口会随机生成,如上,但nodeport支持用户指定生成的端口
修改yaml
vi service-nodeportyaml
加入指定端口( 注意,填写端口范围为30000-32767
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: web3
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30002
  selector:
    app: nginx
更新yaml
kubectl apply -f service-nodeport.yaml
查看当前service服务
kubectl get svc
端口已被修改为指定端口
3.2 LoadBalancer:
LoadBalancer:与NodePort类似,在每个节点上启用一个端口来暴 露服务。除此之外,Kubernetes会请求底层云平台(例如阿里云、腾 讯云、AWS等)上的负载均衡器,将每个Node ([NodeIP]:[NodePort])作为后端添加进去。

有关k8s之Service的更多相关文章

  1. ruby-on-rails - 将 Amazon Simple Notification service SNS 与 ruby​​ 结合使用 - 2

    很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭9年前。我需要从基于ruby​​的应用程序使用AmazonSimpleNotificationService,但不知道从哪里开始。您对从哪里开始有什么建议吗?

  2. ruby-on-rails - Rails 'service objects' 最佳实践 - 类方法或实例化 - 2

    我正在按照我一直在研究的研讨会实现“服务对象”,我正在构建一个redditAPI应用程序。我需要对象返回一些东西,所以我不能只执行初始化程序中的所有内容。我有这两个选择:选项1:类需要实例化classSubListFromUserdefuser_subscribed_subs(client)@client=client@subreddits=sort_subs_by_name(user_subs_from_reddit)endprivatedefsort_subs_by_name(subreddits)subreddits.sort_by{|sr|sr[:name].downcase}

  3. ruby-on-rails - Elasticsearch 问题 : Cannot connect AWS elasticsearch service - 2

    我有一个关于配置elasticsearch以连接AWSelasticsearch服务以在生产环境中运行项目的问题。我的gem文件:gem'searchkick'gem'faraday_middleware-aws-signers-v4'gem'aws-sdk','~>2'gem"elasticsearch",">=1.0.15"引用:https://github.com/ankane/searchkick我的config/initializers/elasticsearch.rb文件:require"faraday_middleware/aws_signers_v4"ENV["ELAS

  4. k8s-污点 (Taint)和容忍 (Tolerations) - 2

    文章目录一、污点(Taint)1、污点简介2、污点的组成3、污点的设置和去除二、容忍(Tolerations)1、容忍简介2、容忍的基本用法3、示例4、多污点与多容忍配置三、警戒(cordon)和转移(drain)四、Pod启动阶段(相位phase)五、故障排除步骤一、污点(Taint)节点亲和性,是Pod的一种属性(偏好或硬性要求),它使Pod被吸引到一类特定的节点Taint则相反,它使节点能够排斥一类特定的PodTaint和Toleration相互配合,可以用来避免Pod被分配到不合适的节点上。每个节点上都可以应用一个或多个taint,这表示对于那些不能容忍这些taint的Pod,是不会被

  5. org.elasticsearch.cluster.block.clusterblockexception: blocked by: [service_unavailable/1/state not - 2

    文章目录一.搭建集群时出现错误错误日志elasticsearch.logorg.elasticsearch.cluster.block.clusterblockexception:blockedby:[service_unavailable/1/statenotrecovered/initialized];原因:解决方案:一.搭建集群时出现错误错误日志elasticsearch.logorg.elasticsearch.cluster.block.clusterblockexception:blockedby:[service_unavailable/1/statenotrecovered/i

  6. 云原生(十八) | Kubernetes篇之Kubernetes(k8s)工作负载 - 2

    文章目录Kubernetes(k8s)工作负载一、Workloads二、Pod三、Deployment四、RC、RS、DaemonSet、StatefulSet五、Job、CronJob1、Job2、CronJob六、GCKubernetes(k8s)工作负载一、Workloads什么是工作负载(Workloads)工作负载是运行在Kubernetes上的一个应用程序。一个应用很复杂,可能由单个组件或者多个组件共同完成。无论怎样我们可以用一组Pod来表示一个应用,也就是一个工作负载Pod又是一组容器(Containers)所以关系又像是这样工作负载(Workloads)控制一组PodPod控制

  7. K8s部署PHP项目 - 2

    前言    前端时间PHP项目部署升级需要,需要把Laravel开发的项目部署K8s上,下面以laravel项目为例,讲解采用yaml文件方式部署项目。一、部署步骤1.创建Dockerfile文件Dockerfile是一个用来构建镜像的文本文件,在容器运行时,需要把项目文件和项目运行所必须的组件安装其中。#基础镜像FROMphp:7.4-fpm#时区ARGTZ=Asia/Shanghai#更换容器时区RUNcp"/usr/share/zoneinfo/$TZ"/etc/localtime&&echo"$TZ">/etc/timezone#替换成阿里apt-get源RUNsed-i"s@http

  8. 【k8s】二、containerd的安装 - 2

    目录前言安装containerd解压安装配置成systemd任务安装runc​编辑安装cni配置containerd镜像源containerd基本使用拓展阅读nerdctl工具安装及使用整体脚本总结写在后面前言上一篇文章,我们介绍了虚拟机的基础环境以及基础的网络配置,还有一些k8s节点要用到基础环境配置。本文将带领大家把containerd给安装了containerd的项目官方地址https://github.com/containerd/containerdcontainerd的发布版本地址如下https://github.com/containerd/containerd/releases

  9. idea连接远程k8s集群使用kubernetes-client - 2

    文章目录一.k8s集群修改config1.1备份当前k8s集群配置文件1.2删除当前k8s集群的apiserver的cert和key1.3生成新的apiserver的cert和key1.4刷新admin.conf1.5重启apiserver1.6刷新.kube/config二.安装kubectl2.1下载kubectl2.2配置kubectl三.使用kubernetes-client操作k8s集群3.1依赖3.2注意(可忽略)3.3创建StatefulSet3.4运行shell命令3.5删除StatefulSet3.6线上运行注意一.k8s集群修改config因为默认的是内网IP,复制出来后,

  10. javascript - 在不同的文件夹中注册 Service Worker - 2

    我想知道如何正确注册服务人员,在开发中一切正常,我调用服务人员:if(navigator.serviceWorker){navigator.serviceWorker.register('./sw.js').then(function(reg){if(reg.waiting){reg.waiting.postMessage({action:'skipWaiting'});return;}reg.addEventListener('updatefound',function(){trackInstalling(reg.installing);});varrefreshing;naviga

随机推荐