进学阁

业精于勤荒于嬉,行成于思毁于随

0%

Kubernetes概念

什么是service

在使用虚拟机或者裸容器部署应用时,程序之间的互相访问一般是通过宿主机的IP+端口号的形式进行访问,因为宿主机的IP地址一般不会轻易改变,所以用IP+端口的方式并没什么大问题。 但使用Kubernetes部署Pod应用时,Pod会被调度器随机调度至最佳节点,并且会经常删除重建,所以Pod的IP地址并不是一成不变的。 这时候再使用之前的IP+端口的方式就行不通了,所以Service就应运而生。

每个 Service具有一个 IP 地址和一个可解析为该 IP 地址的 DNS 名称,可以实现对一个或多个 Pod的流量进行负载均衡处理。IP地址和 DNS 名称只能在Kubernetes内部访问。

可以将Service简单的理解成Pods的负载均衡器。

Service默认是使用ClusterIp模式,仅支持集群内部访问,如果需要外部能访问到这个Service则需要使用另外两种类型的对象:NodePort 和 LoadBalancer。

Service对应KubeSphere平台中的服务。

示例service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## 创建service
---
apiVersion: v1
kind: Service
metadata:
namespace: koalas-cloud
labels:
app: koalas-appapi
name: koalas-appapi
spec:
sessionAffinity: None
selector:
app: k-appapi
ports:
- name: http-k-appapi
protocol: TCP
targetPort: 7071
port: 7071


service配置文件详解

apiVersion: v1

kind: Service

metadata:

1
2
3
4
5
6
7
labels:

app: iam-apiserver

name: iam-apiserver

namespace: default

spec:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
clusterIP: 192.168.0.231 # 虚拟服务地址

externalTrafficPolicy: Cluster # 表示此服务是否希望将外部流量路由到节点本地或集群范围的端点

ports: # service需要暴露的端口列表

- name: https #端口名称

nodePort: 30443 # 当type = NodePort时,指定映射到物理机的端口号

port: 8443 # 服务监听的端口号

protocol: TCP # 端口协议,支持TCP和UDP,默认TCP

targetPort: 8443 # 需要转发到后端Pod的端口号

selector: # label selector配置,将选择具有label标签的Pod作为其后端RS

app: iam-apiserver

sessionAffinity: None # 是否支持session

type: NodePort # service的类型,指定service的访问方式,默认为clusterIp