Kubernetes Service

本文将介绍 Kubernetes 中的 Service,即负载均衡。

一、什么是 Service?

Service 的设计目的是解决 动态变化的 Pod 的访问 问题。

具体来说,我们通常会通过 Deployment 和 DaemonSet 部署应用,它们虽然能够保证应用的总数和分布,但是无法 “固定” Pod,Pod 总是在销毁和创建中保证 “期望状态”。为了实现对这些动态变化的 Pod 的访问,Kubernetes 设计了 Service,可以将它理解为 Kubernetes 中的负载均衡。

二、Service 的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Kubernetes的KPI版本号
apiVersion: v1
# 资源对象的类型 【Pod、Node、Job、Service等】
kind: Service
# 元信息,用于标记资源对象
metadata:
# 名称
name: ngx-svc
# 说明,描述资源对象的目标状态
spec:
# 筛选器
selector:
app: ngx-dep
# 端口配置
ports:
# 映射端口
- port: 80
# 目标容器端口
targetPort: 80
# 协议
protocol: TCP

三、注意事项

  • Service 创建成功后,Kubernetes 会为其分配一个 IP 地址,可以通过该地址访问到其代理的资源对象
  • 这个 IP 是一个 “虚地址”,它会且仅会转发流量
  • 如果希望以域名形式访问 Service,可以利用 Kubernetes 的 DNS 插件
  • 默认情况下,Service 的 type 为 ClusterIP,它只能在集群内部被访问。如果希望在集群外访问,可以将 type 设置为 NodePort,则 Kubernetes 会在集群的每个节点上创建一个独立的端口,该端口可以被外部访问

参考

  • Kubernetes
  • Kubernetes 入门实战课
  • 深入剖析 Kubernetes