前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >容器编排引擎Kubernetes 08——Service介绍及使用

容器编排引擎Kubernetes 08——Service介绍及使用

原创
作者头像
用户8100582
修改2024-02-02 19:37:39
1870
修改2024-02-02 19:37:39
举报
文章被收录于专栏:微服务化微服务化

系列目录

  1. 容器编排引擎Kubernetes 01——一文带你认识K8S
  2. 容器编排引擎Kubernetes 02——k8s安装配置
  3. 容器编排引擎Kubernetes 03——初始化集群
  4. 容器编排引擎Kubernetes 04——部署Dashboard
  5. 容器编排引擎Kubernetes 05——命名空间和POD
  6. 容器编排引擎Kubernetes 06——kubectl常用命令
  7. 容器编排引擎Kubernetes 07——Deployment介绍及使用
  8. 容器编排引擎Kubernetes 08——Service介绍及使用
  9. 容器编排引擎Kubernetes 09——资源文件的介绍及使用
  10. 容器编排引擎Kubernetes 10——在k8s集群中部署项目

1 为什么需要 Service?

通过之前学习的部分,我们已经通过 Deployment 来创建一组 Pod 来提供具有高可用性的服务。虽然每一个 pod 都会分配一个单独的 Pod IP,但是存在以下问题:

  • Pod IP 是只能在集群内可见的虚拟IP,外部无法访问;
  • Pod IP 会随着 Pod 销毁而消失,当 Deployment 对 Pod 进行动态伸缩时,Pod IP 可能随时随地都会变化,这样对于我们访问这个服务带来了难度。

这种情况下,就有 Service 提供了负载均衡的能力,不过在使用上存在以下限制:

仅提供了4层负载均衡的能力,没有7层功能。有时我们可能需要更多的匹配规则来转发请求,此时4层将无法满足。

因此,k8s中的 Service 对象,就是解决以上问题的,实现服务发现的核心关键。

2 Service 类型

Service 在k8s中有三种类型:

  • ClusterIP 默认类型,自动分配一个仅Cluster内部可以访问的虚拟IP
  • NodePort 每个节点启用一个端口,并对外暴露服务。在 ClusterIP 基础上为 Service 在每台机器上绑定一个端口,这样就可以通过 NodeIP:NodePort 访问来访问该服务。端口范围为:30000~32767;
  • LoadBalancer 在 NodePort 的基础上,借助 Cloud Provider 创建一个外部负载均衡器,并将请求转发到 NodePort。

3 kube-proxy 的代理模式

Service 只是一个概念,真正起作用的其实是 kube-proxy 进程。

  • userspace 模式

该规则效率较低,当前已经不再使用。

  • Iptables

在该模式下,kube-proxy 为 service 后端的每个 pod 创建对应的 iptables 规则,直接将发向 cluster ip 的请求重定向到一个 pod ip。kube-proxy 不承担四层负载均衡的角色,只负责创建 iptables 规则。该模式的优点相较 userspace 模式效率更高,但不能提供灵活的负载均衡策略,当后端 Pod 不可用时,也无法进行重试。

  • IPVS

在该模式下,kube-proxy 监视 k8s service 和 endpoint,然后调用 netlink 接口创建IPVS规则,并定期与 k8s service 和 endpoint 同步IPVS规则。该控制回路确保IPVS状态与期望的状态保持一致。

4 创建 Service

4.1 创建一个 nginx-service.yaml 文件

如果要在外部访问到该服务,需要在 .spec.type字段配置为 NodePort,同时在 kind 字段设置为 Service 类型。

代码语言:yaml
复制
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

4.2 使用配置文件创建服务

代码语言:shell
复制
kubectl apply -f nginx-service.yaml

service 被创建完成。

4.3 查看服务

kubectl get svc

service 的TYPE为 NodePort,且在PORT列可以查看到有通过外部访问的端口号。

4.4 访问服务

使用上边k8s给service分配的随机端口 30192,加上master节点的IP地址,组成url在浏览器中输入后,查看结果。

5 删除 Service

5.1 根据配置文件删除

kubectl delete -f <service配置文件名>

通过配置文件删除资源时,如果当前目录下没有配置文件,需要指定该资源的配置文件绝对或相对目录。

5.2 根据service名称删除

kubectl delete svc/<service服务名>

根据名称删除service,如果不知道具体的名称,可以先使用 kubectl get svc获取要删除的service名称。service 删除后对 pod 没有任何影响。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 系列目录
  • 1 为什么需要 Service?
  • 2 Service 类型
  • 3 kube-proxy 的代理模式
  • 4 创建 Service
    • 4.1 创建一个 nginx-service.yaml 文件
      • 4.2 使用配置文件创建服务
        • 4.3 查看服务
          • 4.4 访问服务
          • 5 删除 Service
            • 5.1 根据配置文件删除
              • 5.2 根据service名称删除
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档