通过Service来暴露你的应用

目标

  • 了解什么是Kubernetes Services
  • 了解什么是Kubernetes Labels
  • 将一个应用暴露在Kubernetes之外

Kubernetes Services
每个Pod都有一个在集群中唯一的IP的,但是这些IP没有暴露在Kubernetes之外的。考虑到Pod可能会在某个时间点被中断,被删除或者被其他Pod所替换,我们需要一种机制来让Pod和应用能够自动的发现对方。Kubernetes通过将一个或多个Pod组合成Service的方式实现这种机制。一个Kubernetes Service代表的是一系列Pod构成的一个逻辑集合的抽象层,它为这些Pod提供了负载均衡,服务发现和外部通信暴露功能。
这个抽象层允许我们将Pod暴露给来自集群外部的流量。Service有它自己的集群内唯一IP和暴露的端口用来接收外部流量。如果你要将Service暴露给外部,有下面几种方式:

  • LoadBalancer - 提供一个公共的IP地址(比较典型的场景是你的Kubernetes运行在GCP或者AWS上)
  • NodePort - 将服务暴露在集群中的每个节点上的同一个端口上(通过NAT的方式,Kubernetes集群和Minikube都可以使用)

Service架构

Service可以对发送到Pod上的流量进行负载均衡。当我们的Service是由某个特定的Deployment所构成的Pod组合成的时候,这个功能非常有用(我们的实例会在下一个模块中使用这个功能,因为我们需要多个实例同时运行)

Service同时负责对集群内的服务发现进行相关的处理(详情请见 Accessing the Service)。例如我们可以允许一个前端服务(比如web server)可以接收来自后端服务(数据库服务之类)的请求而不需要在一个Pod内。

Service通过Label Selector(标签选择器)来匹配一系列的Pod,Label Selector允许在Label上做一系列的逻辑操作。

你可以在用kubectl run命令启动Deployment的时候通过添加创--expose参数来建一个Service

Label是附加在对象(比如Pod)上的键值对,你可以把他们当做是社交媒体上面的标签(类似话题?)。
Label对使用者来说是具体特别含义的,因此可以用来组织对象,类似:
生产环境(production, test, dev)
应用版本((beta, v1.3)
服务或者server类型(frontend, backend, database)

Labels

Label可以在对象创建的时候设置给它,也可以在其他任意时间修改。kubectl run命令会设置一些默认的Label/Label Selector在新的Pod或者Deployment上。Label和Label Selector之间的关联定义了Deployment和它创建的Pod之间的关联。现在我们可以在Service的帮助下暴露我们的应用了,并且可以给它们设置一些Label

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • •Kubernetes介绍1.背景介绍云计算飞速发展- IaaS- PaaS- SaaSDocker技术突飞猛进-...
    Zero___阅读 14,766评论 0 21
  • 1.1 Kubernetes是什么 首先,它是一个全新的基于容器技术的分布式架构领先方案; 其次,Kubernet...
    c84f3109853b阅读 80,671评论 1 117
  • 1.Pod Pod是k8s的最基本的操作单元,包含一个或多个紧密相关的容器,类似于豌豆荚的概念。一个Pod可以被一...
    jony456123阅读 7,488评论 0 5
  • kubernetes 简介 一个迅速过一遍kubernetes 非常不错的资源:基于Kubernetes构建Doc...
    bradyjoestar阅读 15,305评论 2 7
  • Kubernetes 是 docker 容器编排系统, 用于协调高可用的计算机集群,并在这个集群上以更有效的方式自...
    莫林君阅读 6,710评论 1 4