企业网站建设平台,东莞网站建设公司辉煌大厦,it公司排名,湖北专业的网瘾戒除学校地址Service 的功能#xff1a;
Service主要用于提供网络服务#xff0c;通过Service的定义#xff0c;能够为客户端应用提供稳定的访问地址#xff08;域名或IP地址#xff09;和负载均衡功能#xff0c;以及屏蔽后端Endpoint的变化#xff0c;是K8s实现微服务的核心资源。…Service 的功能
Service主要用于提供网络服务通过Service的定义能够为客户端应用提供稳定的访问地址域名或IP地址和负载均衡功能以及屏蔽后端Endpoint的变化是K8s实现微服务的核心资源。
Service主要解决了什么问题
引入Service主要是解决Pod的动态变化通过创建Service可以为一组具有相同功能的容器应用提供一个统一的入口地址并且将请求负载分发到后端的各个容器应用上。由于pod的不稳定性比如水平扩展时pod异常时生成新的pod都会让pod拥有新的ip地址这不利于前端的访问所以需要把pod绑定到固定的IP域名上所以Service就出现了。
本文主要介绍Service的创建方法命令行模式和声明模式
Service主要是为Pod提供统一访问入口的资源对象所有需要先创建一个pod 创建Pod kubectl run nginx --imagenginx --port80 --labelsappnginx kubectl run nginx 创建一个名为nginx的pod--imagenginx使用nginx镜像文件--port80声明服务的端口--labelsappnginx 给pod打上标签 note 如果pod想要外部访问必须打上标签 命令行模式创建service并绑定“ app nginx” 的pod kubectl expose pod nginx --port80 --target-port80 --typeNodePortkubectl expose pod nginx 创建一个svcsvc的名称就是nginx自动选择nginx pod的标签--port80 svc的端口--target-port80容器的端口--typeNodePortsvc的类型NodePort模式会自动把svc的80端口映射到所有node主机的随机端口端口范围30000-32767这样客户端可以通过任意node主机的IP 端口访问到Pod。
svc的几种类型
类型描述ClusterIP集群内部使用NodePort对外暴露应用端口集群外可访问LoadBalancer对外暴露应用将Service映射到一个已存在的负载均衡器的IP地址上适合公有云ExternalName将Service映射为一个外部域名地址通过externalName字段进行设置
查看svc
# kubectl get svc nginx -o wideNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
nginx NodePort 10.105.125.73 none 80:30974/TCP 12m appnginxCLUSTER-IP Service地址是一个不会变化的ip地址PORT(S) svc端口和node端口的映射SELECTOR 通过标签选择绑定哪些Pod
由于已经通过NodePort模式将svc的端口映射到了node主机的 30974 端口即可以通过node的ip加端口访问到Pod的服务 通过yaml 文件声明式的创建svc 编写yaml文件 # cat nginx.yamlapiVersion: v1 # api版本
kind: Service # 绑定资源类型首字符必须大写
metadata # metadata 元数据name: nginx-svc # 定义 svc的名称labels: # 下面是定义标签tier: frontend
spec: # 规格ports: # 定义端口svc和pod- port: 80 # svc的端口protocol: TCP # 协议targetPort: 80 # 容器的端口selector: # 标签选择app: nginxtype: NodePort # svc 类型创建svcsvc 是service的简写 查看那些资源对象存在简写 kubectl api-resources # kubectl create -f nginx.yaml查看svc # kubectl get svc nginx-svc -o wideNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
nginx-svc NodePort 10.107.55.165 none 80:32238/TCP 5m40s appnginx-o wide 显示更多信息 svc nginx-svc的类型为 NodePort 同样可以通过 node的ip加端口访问到pod 里的容器服务。
Additional information
可以使用命令行创建svc的使用使用 -o yaml输出yaml格式信息。
例如
kubectl expose pod nginx --port80 --target-port80 --typeNodePort --dry-runclient -o yamlapiVersion: v1
kind: Service
metadata:creationTimestamp: nulllabels:app: nginxname: nginx
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:app: nginxtype: NodePort
status:loadBalancer: {}--dry-runclient 以客户端的模式运行运行测试并不生效-o yaml以yaml格式输出 --dry-runclient 以客户端的方式尝试运行,配置 -o yaml 输出简略的信息 --dry-runserver 以服务端的方式运行配合-o yaml 输出非常详细的信息 kubectl expose pod nginx --port80 --target-port80 --typeNodePort --dry-runserver -o yamlError from server (AlreadyExists): services nginx already exists在server模式下由于 svc nginx 已经存在所以报错删除svc nginx即可正常显示