service资源实现服务发现的四种方式 可以进行映射
1. service 的概述
service主要解决Pod的ip地址变化 提供统一的访问入口
service有一下两个作用
1)通过标签去关联一组Pod 以实现服务发现的功能
2)基于iptables 或者 ipvs 实现负载均衡的功能
2. service 类型
- ClusterIP:
用于内部服务基于service 名称的访问 这需要依赖于coreDns组件是正常工作的 它的应用场景是k8s集群内部服务之间的访问
- NodePort :
用于kubernetes 集群以外的服务主动访问运行在 kubernetes
集群内部的服务 它的应用常见是k8s 集群需要访问某个服务 本质上是ClusterIP基础上监听了所有worker
- LoadBalannce:
用于公有云环境的服务暴露
- ExternalName:
用于将k8s集群外部的服务映射至k8s集群内部访问 让集群内部的Pod能够通过固定的service名称访问集群外部的服务
service 名称访问集群外部集群的服务
有时候也用于将不同namespace 之间的Pod通过ExternalNName 进行访问
1)案例1 关于ClusterIP
apiVersion: v1
kind: Service
metadata:
name: oldboyedu-svc
spec:
# 指定标签选择器,用于关联Pod
selector:
app: nginx
# 定义端口映射
ports:
# 指定协议,若不指定,默认是TCP协议
- protocol: TCP
# 指定svc的端口
port: 8888
# 指定容器的目标端口
targetPort: 80
2) 案例2 关于NodePort
apiVersion: v1
kind: Service
metadata:
name: oldboyedu-svc-nodeport-001
spec:
# 指定svc的类型,若不指定,则默认值为CluterIP
type: NodePort
# 指定标签选择器,用于关联Pod
selector:
app: nginx
# 定义端口映射
ports:
# 指定协议,若不指定,默认是TCP协议
- protocol: TCP
# 指定svc的端口
port: 8888
# 指定容器的目标端口
targetPort: 80
# 当svc的类型是NodePort时,可以指定NodePort端口号,若不指定,则端口随机
# 默认有效端口范围是: 30000-32767
nodePort: 30080
3) 案例3 关于LoadBalannce
kind: Service
apiVersion: v1
metadata:
name: svc-loadbalancer-wordpress
spec:
# 指定service类型为LoadBalancer,注意,一般用于云环境
type: LoadBalancer
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
# 注意,将来这个nodeProt也对应的是云环境负载均衡的地址
nodePort: 30085
# 指定LoadBalancer云环境的负载均衡地址,要确保K8S集群能和负载均衡的IP地址进行通信!
externalIPs:
- 10.0.0.88
4) 案例4 关于ExternalName
apiVersion: v1
kind: Service
metadata:
name: svc-externalname
spec:
# svc类型
type: ExternalName
# 指定外部域名
externalName: www.cnblog.com
# externalName: www.baidu.com