视频来源:B站《(2022版)最新、最全、最详细的Kubernetes(K8s)教程,从K8s安装到实战一套搞定》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:(2022版)一套教程搞定k8s安装到实战 | 汇总_COCOgsta的博客-CSDN博客
Service可以简单的理解为逻辑上的一组Pod。一种可以访问Pod的策略,而且其他Pod可以通过这个Service访问到这个Service代理的Pod。相对于Pod而言,它会有一个固定的名称,一旦创建就固定不变。
nginx-svc.yaml
- apiVersion: v1
- kind: Service
- metadata:
- labels:
- app: nginx-svc
- name: nginx-svc
- spec:
- ports:
- - name: http # Service端口的名称
- port: 80 # Service自己的端口,servicea --> serviceb http://serviceb,http://serviceb:8080
- protocol: TCP # UDP TCP SCTP default:TCP
- targetPort: 80 # 后端应用的端口
- - name: https
- port: 443
- protocol: TCP
- targetPort: 443
- selector:
- app: nginx
- sessionAffinity: None
- type: ClusterIP
- 复制代码
希望在生产环境中使用某个固定的名称而非IP地址进行访问外部的中间件服务
希望Service指向另一个Namespace中或其他集群中的服务(不推荐,建议使用.的形式访问)
某个项目正在迁移至k8s集群,但是一部分服务仍然在集群外部,此时可以使用service代理至k8s集群外部的服务
nginx-svc-external.yaml
- apiVersion: v1
- kind: Service
- metadata:
- labels:
- app: nginx-svc-external
- name: nginx-svc-external
- spec:
- ports:
- - name: http # Service端口的名称
- port: 80
- protocol: TCP
- targetPort: 80 #后端应用的端口
- sessionAffinity: None
- type: ClusterIP
- 复制代码
nginx-ep-external.yaml
- apiVersion: v1
- kind: Endpoints
- metadata:
- labels:
- app: nginx-svc-external
- name: nginx-svc-external
- namespace: default
- subsets:
- - addresses:
- - ip: 39.156.69.79
- ports:
- - name: http
- port: 80
- protocol: TCP
- 复制代码
nginx-externalName.yaml
- apiVersion: v1
- kind: Service
- meatadata:
- labels:
- app: nginx-externalname
- name: nginx-externalname
- spec:
- type: ExternalName
- externalName: www.baidu.com
- 复制代码
ClusterIP:在集群内部使用,也是默认值。
ExternalName:通过返回定义的CNAME别名。
NodePort:在所有安装了kube-proxy的节点上打开一个端口,此端口可以代理至后端Pod,然后集群外部可以使用节点的IP地址和NodePort的端口号访问集群Pod服务。NodePort端口范围默认视30000-32767。
LoadBalance:使用云提供商的负载均衡器公开服务。