前面把Pod看的差不多了今天开始弄service,service在K8S集群中就像黑暗街道上的指路灯,告诉你Pod的方向(因为Pod是有生命周期的,所以Pod的IP是不固定的只能通过service帮你转发信息)。service也有很多类型如:ExternalName, ClusterIP, NodePort,LoadBalancer。
service类型:
- ClusterIP:service默认类型,作为node内部使用的service。
- NodePort:可以把Node内部的Pod服务映射到Node节点上,从而实现外部可以访问内部服务。
- LoadBalancer: 使用一个ClusterIP & NodePort,但是会向云计算提供者申请映射到service本身的负载均衡。
- ExternalName:通过kube-dns让内部服务可以访问外部资源。
ClusterIP资源清单编写:
例子:
apiVersion: v1
kind: service
metadata:
name: www-clusterip
namespace: default
spce:
selector:
app: nginx
version: v2.2
clusterIP: 10.99.99.99
type: clusterIP
ports:
- port: 80
targetPort: 80
#clusterIP可以不用设置让系统自动分配也建议这样。
#ports字段中的port:service使用的端口号。targetPort:Pod端口号。
启动service:
kubectl apply -f nginx-clusterip.yaml
注:还有一个比较特殊的ClusterIP是clusterIP字段的值为“None”时service是没有IP的,但你解析service主机名时又会发现他能解析出他管理的Pod IP。
NodePort资源清单编写:
例子:
apiVersion: v1
kind: service
metadata:
name: nginx-nodeport
namespace: default
spce:
selector:
app: nginx
version: v3.2
type: NodePort
sessionAffinity: ClientIP
ports:
port: 80
targetPort: 80
nodePort: 30080
#nodePort:把service内部的Pod 80端口映射到节点上的30080端口上。
#sessionAffinity:访问者第一次访问那个Pod以后就一直访问这个Pod。