[toc]

一、概述

我们已经能够利用Deployment来创建一组Pod来提供具有高可用性的服务,虽然每个Pod都会分配一个单独的Pod的IP地址,但是却存在如下的问题:

  1. Pod的IP会随着Pod的重建产生变化。
  2. Pod的IP仅仅是集群内部可见的虚拟的IP,外部无法访问。

image.png

这样对于访问这个服务带来了难度,因此,kubernetes设计了Service来解决这个问题。

Service可以看做是一组同类的Pod对外的访问接口,借助Service,应用可以方便的实现服务发现和负载均衡。

image.png

二、语法及应用示例

1. 创建集群内部可访问的Service

语法:暴露Service

kubectl expose deployment xxx --name=服务名 --type=ClusterIP --port=暴露的端口 --target-port=指向集群中的Pod的端口 [-n 命名空间]
# 会产生一个CLUSTER-IP,这个就是service的IP,在Service的生命周期内,这个地址是不会变化的

示例:暴露名为dev的namespace下的名为nginx的deployment,并设置服务名为svc-nginx

kubectl expose deployment nginx --name=svc-nginx --type=ClusterIP --port=80 --target-port=80 -n dev

语法:查看Service

kubectl get service [-n 命名空间] [-o wide]

示例:查看名为test的命名空间的所有Service

kubectl get service -n dev

image.png

进行集群间访问:
image.png

2. 创建集群外部可访问的Service

语法:暴露Service

kubectl expose deployment xxx --name=服务名 --type=NodePort --port=暴露的端口 --target-port=指向集群中的Pod的端口 [-n 命名空间]
# 会产生一个外部也可以访问的Service

示例:暴露名为dev的namespace下的名为nginx的deployment,并设置服务名为svc-nginx2

kubectl expose deployment nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n dev

语法:查看Service

kubectl get service [-n 命名空间] [-o wide]

示例:查看名为test的命名空间的所有Service

kubectl get service -n test

image.png
image.png

3. 删除服务

语法:删除服务

kubectl delete service xxx [-n 命名空间]

示例:删除服务

kubectl delete service svc-nginx1 -n test

image.png

执行创建和删除命令:

kubectl  create  -f  svc-nginx.yaml
kubectl  delete  -f  svc-nginx.yaml

image.png

Q.E.D.


只有创造,才是真正的享受,只有拚搏,才是充实的生活。