k8s_service
service
功能
主要是提供负载均衡和服务自动发现。 pod的ip会随着升降级、销毁的操作改变。客户端不能直接访问pod的ip。
service资源被用于在被访问的pod对象中添加一个有着固定IP地址的中间层,客户端向此 地址发起访问请求后由相关的service资源调度并代理至后端的pod对象。
类型
ClusterIP:集群内可以访问的ip
NodePort:绑定到Node上可以对外提供访问
LoadBalance:第三种,通常由云服务商提供,比如阿里云的负载均衡服务,根据实际情况参考。
service的命令行操作
#pod绑定service [root@k8s-01 ~]# kubectl get pods -o wide|grep nginx-d nginx-d-8668fb97b9-7tw25 1/1 Running 0 81m 10.244.1.75 k8s-02 <none> <none> [root@k8s-01 ~]# kubectl expose pods nginx-d-8668fb97b9-7tw25 service/nginx-d-8668fb97b9-7tw25 exposed [root@k8s-01 ~]# kubectl get service nginx-d-8668fb97b9-7tw25 -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR nginx-d-8668fb97b9-7tw25 ClusterIP 10.1.255.237 <none> 80/TCP 110s app=nginx,pod-template-hash=8668fb97b9 #通常service与deployment进行绑定,如上示例,默认创建的service为clusterip类型,不能与外部进行通信 #下面示例给deployment创建nodeport类型service并从外部访问 [root@k8s-01 ~]# kubectl expose deployment nginx-d --type=NodePort service/nginx-d exposed [root@k8s-01 ~]# kubectl get service nginx-d -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR nginx-d NodePort 10.1.35.86 <none> 80:31438/TCP 28s app=nginx #删除service [root@k8s-01 ~]# kubectl delete service nginx-d
这里deployment创建nodeport查询的含义就是将pod的80端口映射到node节点的31438端口,访问任意nodeip:31438就相当于访问deployment
service配置文件
#api版本 apiVersion: v1 #对象资源类型 kind: Service #元数据 metadata: #service名称 name: nginx-s #svc的详细描述 spec: #service type类型 ClusterIP(默认);NodePort type: NodePort ports: #在ClusterIP上映射的端口,集群内部不同pod之间相互访问使用 - port: 88 #nodePort范围为30000~32767 nodePort: 32000 #映射的nodePort,每个node上都会进行该映射 targetPort: 80 #对应pod中container中提供服务的端口 protocol: TCP selector: #给指定标签的资源创建service,可以是deployment也可以是pod只要label符合下面要求就行。 app: nginx
#deployment label查询
[root@k8s-01 ~]# kubectl get deployment nginx-d --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-d 3/3 3 3 114m app=nginx
[root@k8s-01 ~]# kubectl create -f service_demo.yml
service/nginx-s created
[root@k8s-01 ~]# kubectl get svc nginx-s -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
nginx-s NodePort 10.1.155.16 <none> 88:32000/TCP 2m51s app=nginx-d