以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
基本介绍
Service 是 Kubernetes 提供的一种服务发现机制,主要作用是通过 nodeSelector(标签选择器)关联 Pod 对象,以单一入口方式提供内部服务,解决了 Pod 重建后 IP 地址发生变化的问题。
Service 具有以下特点:
工作原理
对象类型
资源清单(示例)
# demo-servcie.yaml
apiVersion: v1
kind: Service
metadata:
name: demo-service
spec:
selector: # 没有match,否则会报错
app: web
type: ClusterIP / NodePort / LoadBalancer
#clusterIP: xx.xx.xx.xx / None # Headless Service 配置为 None
#externalIPs:
#- xx.xx.xx.xx
ports:
- name: http # 注意:暴露多个端口时,需要指定每个端口的 name
protocol: TCP / UDP
port: 80
targetPort: 8080 # 建议使用 containerPort 的名称,如 http,https
nodePort: 30000-32767
- name: https
protocol: TCP / UDP
port: 443
targetPort: 8443 # 好处:containerPort 改变后,不需要修改
#nodePort: 30001 # 端口范围:30000-32767
创建对象
# 方法一:基于已有 Deployment 对象创建
kubectl expose deployment <对象名称> --type=<类型> --port=<port> --targetPort=<targetPort>
# 示例:
kubectl expose deployment demo-deployment --type=ClusterIP --port=80 --targetPort=80
# 方法二:命令行创建
kubectl create servcie <Servcie 类型> <对象名称> --tcp=<port>:<targetPort>
# 示例:
kubectl create servcie clusterip demo-servcie --tcp=80:80
# 方法三:基于资源清单创建
kubectl create -f demo-servcie.yaml
或
kubectl apply -f demo-servcie.yaml
附录
1、Kubernetes 的三种 IP 类型
2、Kubernetes 各种 “Port” 的含义