【五】K8S_Service | ClusterIP模式(默认模式)| NodePort模式
Service概念
在Kubernetes(K8S)中,Service的用途和相关概念如下:
- 服务发现:Service充当了一组Pod的稳定网络地址和DNS名称的抽象。它提供了一种统一的方式,使得其他应用程序或服务可以通过Service的地址来访问这组Pod,而无需直接关注每个Pod的IP地址和变化。
- 负载均衡:Service可以在一组Pod之间实现流量的负载均衡。当多个Pod属于同一个Service时,Kubernetes会自动将流量分发到这些Pod中,以确保每个Pod都能够处理一部分请求,从而提高应用程序的可扩展性和性能。
- 服务类型:Service提供了不同的服务类型,包括ClusterIP、NodePort、LoadBalancer和ExternalName。
- ClusterIP类型为Service分配了一个集群内部的虚拟IP地址,仅供集群内部的其他资源使用。
- NodePort类型为Service在每个节点上绑定了一个固定的端口,使得外部客户端可以通过节点的IP地址和NodePort来访问该Service。
- LoadBalancer类型通过云平台提供的负载均衡器实现外部流量的分发。
- ExternalName类型允许将Service映射到集群外部的外部域名。
- 会话保持:Service可以通过启用sessionAffinity属性来实现会话保持。当会话保持被启用时,Kubernetes会尽可能将同一客户端的请求发送到同一个Pod,以维持会话的状态和连续性。
- DNS解析:创建Service后,Kubernetes会在集群的内置DNS服务器中自动生成相应的DNS记录。这使得其他应用程序可以通过Service的名称进行简单的DNS解析,而无需关心具体的IP地址和端口。
- 连接管理:Service提供了连接管理功能,包括连接超时和空闲连接回收等。这有助于优化资源利用、管理连接池,并提高应用程序的可靠性和性能。
通过使用Service,您可以实现应用程序的服务发现、负载均衡和网络访问等功能。它提供了一个抽象层,使得应用程序可以方便地与一组Pod进行通信,而无需了解每个Pod的具体细节和拓扑结构。同时,Service还可以与其他K8S资源对象(如Deployment、Pod)进行配合使用,提供灵活和可靠的服务管理功能。
案例:
首先在创建的deployment 的三副本每个容器里配置:
root@my-dep-5b7868d854-5mnx7:/# echo 1111111111111 > /usr/share/nginx/html/index.html
root@my-dep-5b7868d854-5mnx7:/#
root@my-dep-5b7868d854-5m4444:/# echo 222222222222 > /usr/share/nginx/html/index.html
root@my-dep-5b7868d854-5mnx7:/#
root@my-dep-5b7868d854-686868:/# echo 33333333333 > /usr/share/nginx/html/index.html
root@my-dep-5b7868d854-5mnx7:/#
删除之前的service并创建新的service
[root@master ~]# kubectl delete service my-dep
[root@master ~]# kubectl expose deploy my-dep --port=8000 --target-port=80
service/my-dep exposed
也可以写一个yaml文件
apiVersion: v1
kind: Service #服务类型
metadata:
labels:
app: my-dep
name: my-dep #服务名字
spec:
selector: #选择的哪些标签的pod下图有--show-labels
app: my-dep
ports:
- port: 8000
protocol: TCP
targetPort: 80
查看新创建的service并观察特点
[root@master ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d17h
my-dep ClusterIP 10.96.197.40 <none> 8000/TCP 38s
[root@master ~]# curl 10.96.197.40:8000
222222222222 /root
[root@master ~]# curl 10.96.197.40:8000
33333333333333333333
[root@master ~]# curl 10.96.197.40:8000
222222222222 /root
[root@master ~]#
在容器内部用域名访问
[root@master ~]# kubectl exec -it my-dep-5b7868d854-5mnx7 -- /bin/bash
root@my-dep-5b7868d854-5mnx7:/# curl my-dep.default:8000
222222222222 /root
root@my-dep-5b7868d854-5mnx7:/# curl my-dep.default:8000
222222222222 /root
root@my-dep-5b7868d854-5mnx7:/# curl my-dep.default:8000
1111111111111
root@my-dep-5b7868d854-5mnx7:/#
Service网络模式
Service-ClusterIP模式(默认模式)
集群内使用service的ip:port就可以负载均衡的访问
Service-NodePort模式
--type=ClusterlP:集群内部的访问
--type=NodePort: 集群外也可以访间问
[root@master ~]# kubectl delete service my-dep
service "my-dep" deleted
[root@master ~]# kubectl expose deploy my-dep --port=8000 --target-port=80 --type=NodePort
service/my-dep exposed
[root@master ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d22h
my-dep NodePort 10.96.244.208 <none> 8000:32404/TCP 11s
[root@master ~]# curl 10.96.244.208:8000
222222222222
[root@master ~]# curl 10.96.244.208:8000
1111111111111
[root@master ~]# curl 10.96.244.208:8000
1111111111111
也可以通过node节点ip访问注意用的端口
[root@master ~]# curl 172.31.0.3:32404
1111111111111
[root@master ~]# curl 172.31.0.3:32404
33333333333
[root@master ~]# curl 172.31.0.3:32404
1111111111111
阅读剩余
本站代码模板仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END