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

 

posted @ 2021-10-04 21:38  flag_HW  阅读(70)  评论(0编辑  收藏  举报