分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

Kubernetes核心概念之Service详解

发布时间:2023-09-06 02:01责任编辑:彭小芳关键词:暂无标签
    Service是k8s中非常重要的组成单元,作用是作为代理把在POD中容器内的服务发布出去,提供一套简单的发现机制和服务代理,也就是运维常说的‘前端’概念,那么它如何实现代理功能以及自动伸缩服务架构,下面将在本文中详细说明。


Service主要的功能是映射pod对应的端口到宿主机上(代理),或是做负载均衡,还可以将内部IP发布成外部IP

一.服务代理

1.首先创建RC的Pod(使用的是上一节的脚本)

vim rc.json

{"apiVersion": "v1","kind": "ReplicationController","metadata": {        //设置rc的元数据    "name": "nginx-rc"},"spec": {            //设置rc的具体规格    "replicas": 2,    //设置Pod的具体数量    "selector": {        //通过selector来匹配相应的Pod的label        "name": "myservice"    },    "template": {    //设置Pod的模板        "metadata": {            "labels": {                "name":"myservice"        }    },        "spec": {                "containers": [{                       "name": "nginx",                       "image": "nginx",               "imagePullPolicy": "IfNotPresent",    //镜像拉取策略,分为Always,Never,IfNotPresent,默认是Always                       "ports": [{                          "containerPort": 80           }]            }]          }    }}}

kubectl create -f rc.json

kubectl get pod

2.创建Service

①cat myservice.yaml

apiVersion: v1kind: Servicemetadata:  name: myservice        #设定Service名称,必须唯一spec:  selector:    name: myservice        #要匹配的Pod的Label  ports:                    #设置端口转发规则  - port: 80    targetPort: 80    protocol: TCP

②.kubectl create -f myservice.yaml

service "myservice" created

③.kubectl get service

现有两个service,第一个是系统自动分配的service,下面一个可以看到咱们自己创建的service,访问集群的IP是10.254.204.76,开放端口是80

④.kubectl describe service

Endpoints就是连接后端的Pod的容器的ip地址,因为通过Label成功连接上了Pod,现在访问clusterip将被转发到后端的Pod中

3.代理其他后端

①代理Mysql服务器

vim mysql-service.yaml

apiVersion: v1kind: Servicemetadata:  name: mysqlspec:  selector:    name: mysql  ports:  - port: 3306    targetPort: 3306    protocol: TCP

②设置后端ip(缩进一定要正确,不然会报错)

apiVersion: v1kind: Endpointsmetadata:  name: mysqlsubsets:  - addresses:      - ip: 192.168.66.109    #节点ip    ports:      - port: 3306

③创建Service和Endpoints

kubectl create -f mysql-endpoints.yaml-f mysql-service.yaml

④查看Endpoints

kubectl describe ep

二.自动更新

1.将Pod数量缩减为一个

kubectl scale replicationcontroller --replicas=1 nginx-rc

replicationcontroller "nginx-rc" scaled

kubectl get rc

2.查看Service更新情况

kubectl describe service

三.发布Service

由于代理ip10.254.204.76不能通过外部访问,但是web服务需要暴露到外网,这就需要一层转发机制

1.NodePort Service

①创建NodePort Service

vim nodeport-service.yaml

apiVersion: v1kind: Servicemetadata:  name: my-nginxspec:  selector:    app: nginx  ports:  - name: http    port: 80    targetPort: 80    protocol: TCP  type: NodePort

kubectl create -f nodeport-service.yaml

②查询NodePort Service

kubectl describe service my-nginx

K8S创建了一个NodePort,范围是3000-32767,这里就可以通过30664端口访问到web服务,形式是NodeIP:NodePort,如果NodeIP是外网IP则将把流量分发给后端服务器

二.LoadBalancer与外部ip的指定

1.可以再K8S上指定一个不由K8S维护的外部IP,在外部访问时直接使用这个IP就可以把请求分发到后端服务器

①创建Service

vim loadbalancer.yaml 

apiVersion: v1kind: Servicemetadata:  name: my-nginxspec:  selector:    app: nginx  externalIPs: ["121.100.110.88"]      #指定一个外部IP  ports:  - name: http    port: 80    targetPort: 80    protocol: TCP  type: LoadBalancer        #类型负载均衡

kubectl create -f loadbalancer.yaml

②查询LoadBalancer Service

kubectl describe service my-nginx

此时外部访问这个集群的方式为,http://121.100.110.88:31119

其实Service的内容远远不止这些,这些是一些比较常用的功能,如果在平时用到可以参考一下,下节讲解存储Volume

Kubernetes核心概念之Service详解

原文地址:http://blog.51cto.com/forall/2132440

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved