三十一、Kubernetes中Service详解、实例第一篇

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 三十一、Kubernetes中Service详解、实例第一篇,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1、概述

        在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。

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

三十一、Kubernetes中Service详解、实例第一篇

2、Service详解 

2.1、Service的资源清单文件

kind: Service  # 资源类型
apiVersion: v1  # 资源版本
metadata: # 元数据
  name: service # 资源名称
  namespace: dev # 命名空间
spec: # 描述
  selector: # 标签选择器,用于确定当前service代理哪些pod
    app: nginx
  type: # Service类型,指定service的访问方式
  clusterIP:  # 虚拟服务的ip地址
  sessionAffinity: # session亲和性,支持ClientIP、None两个选项
  ports: # 端口信息
    - protocol: TCP 
      port: 3017  # service端口
      targetPort: 5003 # pod端口
      nodePort: 31122 # 主机端口

2.2、Service类型

  • ClusterIP:默认值,它是Kubernetes系统自动分配的虚拟IP,只能在集群内部访问

  • NodePort:将Service通过指定的Node上的端口暴露给外部,通过此方法,就可以在集群外部访问服务

  • LoadBalancer:使用外接负载均衡器完成到服务的负载分发,注意此模式需要外部云环境支持

  • ExternalName: 把集群外部的服务引入集群内部,直接使用

3、Service实例

3.1、创建deploy

在使用service之前,首先利用deploy创建出3个pod,注意要为pod设置app=nginx-pod的标签

创建deployment.yaml,内容如下:

apiVersion: apps/v1
kind: Deployment      
metadata:
  name: pc-deployment
  namespace: dev
spec: 
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
# 创建deploy
[root@k8s-master ~]# kubectl apply -f deployment.yaml
deployment.apps/pc-deployment created


# 查看pod详情
[root@k8s-master ~]# kubectl get pod -n dev -owide
NAME                             READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
pc-deployment-69cbb4f6b6-45fmg   1/1     Running   0          63s   172.17.36.99     k8s-node1   <none>           <none>
pc-deployment-69cbb4f6b6-78dz5   1/1     Running   0          63s   172.17.169.169   k8s-node2   <none>           <none>
pc-deployment-69cbb4f6b6-s8x2h   1/1     Running   0          63s   172.17.169.166   k8s-node2   <none>           <none>


#为了方便测试我们将三个 nginx欢迎页内容分别改为所在容器IP以示区分
[root@k8s-master ~]# kubectl exec -it pc-deployment-69cbb4f6b6-45fmg -n dev /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@pc-deployment-69cbb4f6b6-45fmg:/# echo 172.17.36.99 > /usr/share/nginx/html/index.html

[root@k8s-master ~]# kubectl exec -it pc-deployment-69cbb4f6b6-78dz5 -n dev /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@pc-deployment-69cbb4f6b6-78dz5:/# echo 172.17.169.169 > /usr/share/nginx/html/index.html

[root@k8s-master ~]# kubectl exec -it pc-deployment-69cbb4f6b6-s8x2h -n dev /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@pc-deployment-69cbb4f6b6-s8x2h:/# echo 172.17.169.166 > /usr/share/nginx/html/index.html

# 分别访问三个nginx 可以看出改后效果
[root@k8s-master ~]# curl 172.17.36.99
172.17.36.99
[root@k8s-master ~]# curl 172.17.169.169
172.17.169.169
[root@k8s-master ~]# curl 172.17.169.166
172.17.169.166

3.2、ClusterIP类型的Service

创建service-clusterip.yaml文件

apiVersion: v1
kind: Service
metadata:
  name: service-clusterip
  namespace: dev
spec:
  selector:
    app: nginx-pod
  type: ClusterIP
  ports:
  - port: 80  # Service端口       
    targetPort: 80 # pod端口
# 创建service
[root@k8s-master ~]# kubectl apply -f service-clusterip.yaml
service/service-clusterip created
[root@k8s-master ~]#
[root@k8s-master ~]#

# 查看service 信息
[root@k8s-master ~]# kubectl get svc -n dev -owide
NAME                TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE   SELECTOR
service-clusterip   ClusterIP   10.8.192.195   <none>        80/TCP    7s    app=nginx-pod
[root@k8s-master ~]#
[root@k8s-master ~]#

# 查看service的详细信息
# 在这里有一个Endpoints列表,里面就是当前service可以负载到的服务入口 即为上面我们创建的pod的ip+nginx端口
[root@k8s-master ~]# kubectl describe svc service-clusterip -n dev
Name:              service-clusterip
Namespace:         dev
Labels:            <none>
Annotations:       <none>
Selector:          app=nginx-pod
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.8.192.195
IPs:               10.8.192.195
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         172.17.169.166:80,172.17.169.169:80,172.17.36.99:80
Session Affinity:  None
Events:            <none>

# 查看ipvs 的映射规则 也可以看出调用service 的地址,被已轮询方式转发到相应的pod上,这个规则即为kube-proxy生成的
[root@k8s-master ~]# ipvsadm -Ln
TCP  10.8.192.195:80 rr
  -> 172.17.36.99:80              Masq    1      0          0
  -> 172.17.169.166:80            Masq    1      0          0
  -> 172.17.169.169:80            Masq    1      0          0

# 访问 10.8.192.195 也可以看出这三个ip是以轮询方式被访问
[root@k8s-master ~]# curl 10.8.192.195
172.17.169.169
[root@k8s-master ~]# curl 10.8.192.195
172.17.169.166
[root@k8s-master ~]# curl 10.8.192.195
172.17.36.99
[root@k8s-master ~]# curl 10.8.192.195
172.17.169.169
[root@k8s-master ~]# curl 10.8.192.195
172.17.169.166
[root@k8s-master ~]# curl 10.8.192.195
172.17.36.99
[root@k8s-master ~]# curl 10.8.192.195
172.17.169.169
[root@k8s-master ~]#

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/144663.html

(0)

相关推荐

  • JavaScript之函数声明

    在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

    导读:本篇文章讲解 JavaScript之函数声明,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    Python 2023年3月5日
    00
  • 【转】LockSupport深入浅出

    导读:本篇文章讲解 【转】LockSupport深入浅出,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    后端开发 2022年5月17日
    00
  • 推荐系统公平性论文阅读(二)

    导读:本篇文章讲解 推荐系统公平性论文阅读(二),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    后端开发 2022年5月20日
    00
  • springboot项目配置一个存放图片的服务器(tomcat)

    导读:本篇文章讲解 springboot项目配置一个存放图片的服务器(tomcat),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    Java 2022年5月25日
    00
  • 只会原子类AtomicLong不懂Longadder?我怀疑你多线程计数没我快

    背景 性能比对 源码分析 核心属性 `Celll`类 add 参考 背景 在看本篇文章,希望你已经对多线程和原子类有了一定的了解。说说我们在多线程对一些变量做自增同时要保证线程安全…

    2022年9月23日
    00
  • File类

    导读:本篇文章讲解 File类,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    Java 2022年5月25日
    00
  • Zeek学习(四) —— IP协议解析

    生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

    导读:本篇文章讲解 Zeek学习(四) —— IP协议解析,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    Go语言 2023年4月23日
    00
  • MyBatisPlus自定义sql语句搭配调用QueryWrapper的实现条件查询

    导读:本篇文章讲解 MyBatisPlus自定义sql语句搭配调用QueryWrapper的实现条件查询,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    后端开发 2022年5月12日
    00
  • 一款开源的数据库在线预览、导出工具

    点击关注公众号,实用技术文章及时了解 ‍ ‍database-export是一款多线程生成数据库结构文档的开源springboot工程,能支持最新的数据库版本,可以导出docx格式…

    2022年10月16日
    00
  • tableau踩坑记录2:自定义视图惹的“祸”

    导读:本篇文章讲解 tableau踩坑记录2:自定义视图惹的“祸”,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    2023年1月1日
    00

发表回复

登录后才能评论