1、Kubernetes service
服务可以定义为一组分组的逻辑集合。它可以被定义为pod顶部的一个抽象,它提供了一个IP地址和DNS名称,通过这个名称可以访问pod。使用Service,可以很容易地管理负载均衡配置。它帮助pod很容易扩缩容。
service是Kubernetes中的一个REST对象,它的定义可以发布到Kubernetes主服务器上的Kubernetes apiServer来创建一个新实例。
2、创建service(服务)
1)没有选择器service
创建一个名为不使用selector的cjavapy_service的服务。
apiVersion: v1 kind: Service metadata: name: cjavapy_service spec: ports: - port: 8080 targetPort: 31999
2)使用selector的服务配置文件
apiVersion: v1
kind: Service
metadata:
name: cjavapy_service
spec:
selector:
application: "My Application"
ports:
- port: 8080
targetPort: 31999需要手动创建一个endpoint,
apiVersion: v1
kind: Endpoints
metadata:
name: Tutorial_point_service
subnets:
address:
"ip": "192.168.31.41"
ports:
- port: 8080创建了一个endpoint,将流量路由到定义为“192.168.168.40:8080”的endpoint。
3)多端口服务
对于某些服务,你需要公开多个端口。 Kubernetes 允许你在 Service 对象上配置多个端口定义。 为服务使用多个端口时,必须提供所有端口名称,以使它们无歧义。
apiVersion: v1
kind: Service
metadata:
name: Tutorial_point_service
spec:
selector:
application: “My Application” -------------------> (Selector)
ClusterIP: 10.3.0.12
ports:
-name: http
protocol: TCP
port: 80
targetPort: 31999
-name:https
Protocol: TCP
Port: 443
targetPort: 319983、服务类型
ClusterIP:用于限制集群内的服务。它在定义的Kubernetes集群中公开服务。
spec:
type: NodePort
ports:
- port: 8080
nodePort: 31999
name: NodeportService
NodePort:将在已部署节点的静态端口上公开服务。系统将自动创建一个ClusterIP服务,NodePort服务将路由到该服务。该服务可以在集群外通过NodeIP:nodePort访问。
spec:
ports:
- port: 8080
nodePort: 31999
name: NodeportService
clusterIP: 10.20.30.40
LoadBalancer:使使用云提供商的负载均衡器向外部暴露服务。 外部负载均衡器可以将流量路由到自动创建的 NodePort 服务和 ClusterIP 服务上。
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "my-service"
},
"spec": {
"selector": {
"app": "MyApp"
},
"ports": [
{
"protocol": "TCP",
"port": 80,
"targetPort": 9376,
"nodePort": 30061
}
],
"clusterIP": "10.0.171.239",
"loadBalancerIP": "78.11.24.19",
"type": "LoadBalancer"
},
"status": {
"loadBalancer": {
"ingress": [
{
"ip": "146.148.47.155"
}
]
}
}ExternalName:通过返回 CNAME 和对应值,可以将服务映射到 externalName 字段的内容(例如,foo.bar.example.com)。 无需创建任何类型代理。类型为 ExternalName 的服务将服务映射到 DNS 名称,而不是典型的选择器,需要使用 kube-dns 1.7 及以上版本或者 CoreDNS 0.0.8 及以上版本才能使用 ExternalName 类型。
apiVersion: v1 kind: Service metadata: name: my-service namespace: prod spec: type: ExternalName externalName: my.database.example.com
externalIPs:如果外部的 IP 路由到集群中一个或多个 Node 上,Kubernetes Service 会被暴露给这些 externalIPs。 通过外部 IP(作为目的 IP 地址)进入到集群,打到 Service 的端口上的流量, 将会被路由到 Service 的 Endpoint 上。 externalIPs 不会被 Kubernetes 管理,它属于集群管理员的职责范畴。
根据 Service 的规定,externalIPs 可以同任意的 ServiceType 来一起指定。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- name: http
protocol: TCP
port: 80
targetPort: 9376
externalIPs:
- 80.11.12.10