K8s service服务详解

目录

一 service定义

 1.1 ipvs模式

二  service资源清单

三 service服务实验

3.1 实验环境准备

3.2 cluster ip类型

3.3 nodeip类型

四 ingress

一 service定义

        在k8s中,pod是应用程序的载体,我们可以通过pod的IP来访问应用程序,但是pod的ip是不固定,这也就意味着不方便。

        为了解决这个问题,k8s提供了service资源服务,service会对同一个服务的多个pod进行聚合,并提供一个入口地址,通过访问service的入口地址就能访问到后面的pod服务。

 1.1 ipvs模式

        kube-proxy监控pod的变化并创建对应的ipvs规则,ipvs转发效率更高,除此之外,ipvs支持更多的lb算法

##此模式必须安装ipvs内核,否则会被降级为iptables
#开启ipvs
//1.查看是否生效了ipvs
[root@master ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
##未生效 没有地址

//2.开启ipvs
[root@master ~]# kubectl edit cm kube-proxy -n kube-system
configmap/kube-proxy edited
##搜索mode关键字,改为ipvs

[root@master ~]# kubectl delete pod -l k8s-app=kube-proxy -n kube-system
pod "kube-proxy-6qf2n" deleted
pod "kube-proxy-nvhd9" deleted
pod "kube-proxy-xwsth" deleted
##删除创建的pod 此步生产环境谨慎


//3.查看
[root@master ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.17.0.1:32723 rr
TCP  192.168.1.105:32723 rr
TCP  10.96.0.1:443 rr
  -> 192.168.1.105:6443           Masq    1      0          0         
TCP  10.96.0.10:53 rr

二  service资源清单

 

 

三 service服务实验

3.1 实验环境准备

##准备pod文件
[root@master ~]# cat deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:     
        name: dp
        namespace: dev
        labels:
         version: v1
spec:
    replicas: 3
    selector:
        matchLabels:
           app: nginxpod
    template: 
        metadata:
         labels:
           app: nginxpod
        spec: 
         containers:
           - name: nginx
             image: nginx:1
             ports:
                - containerPort: 80



创建容器

[root@master ~]# kubectl create -f deploy.yaml 
deployment.apps/dp created

进入容器将nginx的主页文件修改为自己的地址
[root@master ~]# kubectl exec -it  dp-644b648b9-m6tsb  -n dev /bin/bash
root@dp-644b648b9-m6tsb:/# echo "$(hostname -i)"  > /usr/share/nginx/html/index.html
root@dp-644b648b9-m6tsb:/# exit

3.2 cluster ip类型

[root@master ~]# cat cluster.yaml 
apiVersion: v1
kind: Service
metadata:     
        name: svc
        namespace: dev
        labels:
         service: v1
spec:
   selector:
        app: nginxpod
   type: ClusterIP
   ports:
    - port: 80  ##service端口
      targetPort: 80  ##pod端口

##创建service
[root@master ~]# kubectl create -f cluster.yaml 
service/svc created

 
##查看实验效果 默认的策略是轮询调度
[root@master ~]# curl 10.111.237.142
10.244.1.76
[root@master ~]# curl 10.111.237.142
10.244.2.82
[root@master ~]# kubectl get svc -n dev
NAME   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
svc    ClusterIP   10.111.237.142   <none>        80/TCP    2m46s

[root@master ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.111.237.142:80 rr
  -> 10.244.1.76:80               Masq    1      0          0         
  -> 10.244.1.77:80               Masq    1      0          0         
  -> 10.244.2.82:80               Masq    1      0          0     
##查看规则可以发现已经帮我建立一个转发

3.3 nodeip类型

        实际环境中,pod是要暴露给外部环境去使用的,nodeip可以做到访问

 [root@master ~]# cat cluster.yaml 
apiVersion: v1
kind: Service
metadata:     
        name: svc
        namespace: dev
        labels:
         service: v1
spec:
   selector:
        app: nginxpod
   type: NodePort
   ports:
    - port: 80  ##service端口
      nodePort: 30002 #指定绑定node的端口 不指定随机分配
      targetPort: 80  ##pod端口
//创建service
[root@master ~]# kubectl create -f cluster.yaml 
\service/svc created

//查看端口
[root@master ~]# kubectl get svc -n dev 
NAME   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
svc    NodePort   10.109.190.33   <none>        80:30002/TCP   33s

//通过访问本机IP 加上30002端口即可

四 ingress

 ingree主要功能是通过域名到service,可以解决前面nodeport端口不够用问题,其主要的原理是,在ingress建立映射规则

需要科学上网没做

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值