优秀的编程知识分享平台

网站首页 > 技术文章 正文

k8s基础知识之service类型(k8s的service类型)

nanyue 2024-10-12 05:43:51 技术文章 11 ℃

kubernetes的service类型有:①:ClusterIP②:nodeport ③:LoadBalancer④:ExternalName,Ingress也可以进行服务暴露。

服务的serviceAffinity:会话亲和性:默认是随机调度的,根据iptables或者ipvs的规则调度会话,设置了这个之后就会把来自同一个客户端IP的访问请求,调度到同一个pod上。

查看service的类型:

kubectl explain service.spec.type

一般有四种类型:

ExternalName、ClusterIP、NodePort、LoadBalancer。

ExternalName是把服务service映射成DNS域名,也可以把外部服务映射到内部服务。它适合集群内部容器访问集群外部服务,它没有selector,也没有定义任何端口和endpoint。

服务service的FQDN全名是:

service_name.namespace_name.svc.cluster.local

当k8s集群内部访问ExternalName类型的服务名name时,就会把请求代理到externalName上。它适用于k8s集群内部容器访问外部资源。

ClusterIP:通过kubernetes集群内部IP暴露服务,服务只能在kubernetes集群内部访问,这也是默认的k8s的service type。

NodePort:通过每个node节点上的IP和静态端口暴露k8s集群的服务。通过请求<NodeIP>:<nodePort>可以把请求代理到kubernetes集群内部的pod上。代理的路径是:

Client客户端--->NodeIP:NodePort---->ServiceIP:ServicePort------->PodIP:ContainerPort

这里的客户端client可以是浏览器,也可以是其他的程序。

LoadBalancer服务类型:使用云服务商提供负载均衡器,可以向外部暴露服务。外部的负载均衡器LB可以路由到NodePort类型的服务和ClusterIP类型的服务。

查看service的端口类型,可以使用命令:

kubectl explain service.spec.ports

NodePort:宿主机上映射的端口。比如一个web应用需要被k8s集群之外的其他用户访问,那么需要配置type=NodePort,若配置NodePort=30001,那么其他机器就可以通过浏览器访问scheme://k8s集群中的任何一个节点IP:30001即可访问到这个服务。例如:http://192.168.116.168:30001。如果在kubernetes集群中部署mysql数据库,MySQL可能不需要被外界访问,只需被内部服务访问,那么就不需要设置NodePort。

Port:service的端口,这个是kubernetes集群内部服务可以访问的端口。

TargetPort:TargetPort是Pod上的端口。从port和nodeport上来的流量,经过kube-proxy流入到后端pod的TargetPort上,最后进入到容器。TargetPort与制作容器时暴露的端口一致,制作容器时使用Dockerfile中的EXPOSE暴露端口。比如官方的nginx容器暴露80端口。

通过yaml 文件部署pod:

Kubectl apply -f pod_name.yml

验证通过yaml 文件创建出来的deployment 控制器:

kubectl get deployment --all-namespaces

Deployment可管理Replicaset、Pod。创建deployment时,会管理replicaset,简称RS。

RS的名称是:deployment名-随机数。

Deployment创建pod时,pod的名字是由RS名称-随机数组成的。

举例来看:

Deployment名称:

kubectl get deployment --all-namespaces

查看到deployment名称为:coredns

Replicaset名称:

kubectl get replicasets --all-namespaces

查看到replicaset名称为:coredns-6d8c4cb4d,名称是deployment_name-随机数,并且可以查看到Replicas数值是2,代表容器的副本数是2。

Pod名称:

kubectl get pod --all-namespaces

查看到pod名称为:

coredns-6d8c4cb4d-67xb4

coredns-6d8c4cb4d-nz5ng

查看到pod名称是在replicaset的名称候加上了随机数。

鼓励的话语:眼界高时无物碍,心源开处有波清!

最近发表
标签列表