美文网首页
Service 资源

Service 资源

作者: Robin92 | 来源:发表于2022-03-22 00:28 被阅读0次

当前的集群,启动了两个 myweb 服务(nginx),当前可以在集群内用容器 IP 进行访问(内网),但无法通过外网访问。(具体来说是此私有地址没有绑定在节点的 IP 上,外网同时也获取不到此节点内容器的 IP 服务)

image.png

在 docker 中,要想被外界访问,我们通常做端口映射,将容器 IP 的端口映射到节点的 端口上,在 K8S 中不可以直接做端口映射,因为在集群内部容器的启动是不固定在某个节点的,而且不是固定一个的。因此,K8S 中引入了一个资源叫 Service。

创建 Service 资源

Service 启用了一个 Cluster IP,向内屏蔽了 Pod IP,向外整合了 Node IP。因此,当访问任意 Node IP 的端口时,会定位到 ClusterIP,然后负载均衡到内部的 Pod IP

image.png
# cat k8s/svc/nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: myweb
spec:
  type: NodePort. # 端口映射的方式,还有其他支持
  ports:
    - port: 80          # cluster IP 的端口
      nodePort: 30000   # 宿主机的端口(宿主机的端口在配置文件中指定)
      targetPort: 80    # pod IP 地址
  selector:       # 为哪些 Pod 做负载均衡是通过标签选择器选择的
    app: myweb2
kubectl create -f k8s/svc/nginx-svc.yaml  # 创建 Service 资源
kubectl describe svc myweb # 查看 Service 资源
kubectl describe svc

这里与教程不一样:Endpoints 中没有匹配到任何 Pod 资源。发现 rc 资源一直没创建起来。

kubectl delete pod --all #  会删除所有 pod
kubectl get all # 获取所有 pod 列表 
# 删除所有 pod 后发现 rc 的 pod 资源没创建出来

通过重启 controller-manager systemctl restart kube-controller-manager 才显示正常。

重启 controller-manager 后显示了 endpoints
重启 master 节点重新查看一下 controller-manager 服务,原来它一直没有开机自启动,难怪每次重启后总是会出现问题。最后通过 kubectl enable kube-controller-manager 命令设置开机自启动。
重启节点后查看 controller-manager 状态

启动正常后,通过我的主机(系列文章中说的 master/node 各节点都是我本机装的 vmware 虚拟机)访问浏览器,终于可以正常访问了(用另外两个 node 的 IP 也可以正常显示):


image.png

所有 node 节点的 IP 都可以访问到 nginx 服务是由各节点上的 kube-proxy 服务自动帮我们创建的。

服务自动发现

演示:通过命令实现扩容 rc 资源。
效果:扩容的 Pod 会自动加入到集群中,这就是服务自动发现。

kubectl scale rc myweb2 --replicas=3
image.png

负载均衡

所启动的服务自动实现了负载均衡。
可通过在不同 nginx 容器中写入不同的 index.html(/usr/share/nginx/html/),然后访问浏览器地址,可发现此功能(由于浏览器会保持长连接,所以看起来不像是 RR 策略)。

修改节点端口号范围

按如下方式操作:

# 修改配置文件
vim /etc/kubernetes/apiserver
# (参考)配置文件中指定 cluster IP 的范围的配置
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
# 修改内容行,设置端口范围
KUBE_API_ARGS="--service-node-port-range=10000-60000"
# 启动命令文件是在这里,以上修改的变量在应用后会生效在此文件中
cat /usr/lib/systemd/system/kube-apiserver.service
# 重启
systemctl restart kube-api-server
WeChat0ac7271a015a7b148acf681241727083.png image.png

相关文章

  • Service 资源

    当前的集群,启动了两个 myweb 服务(nginx),当前可以在集群内用容器 IP 进行访问(内网),但无法通过...

  • kubernetes-service资源

    service资源作用 帮助pod资源做端口映射,实现被外部访问 创建service资源 准备工作:创建一个专有目...

  • Service资源(四)

    k8s的service提供了一个负载均衡的作用,给集群中的pod提供了一个vip,节点的消亡和新增,都会在vip中...

  • puppet自动化之package与service

    资源之安装包定义package service 启动服务的资源定义

  • restful API

    先从Web Service说起。Service就是提供可利用的资源,那么再加上Web这张网就可以对资源利用得到极大...

  • 阿里云资源编排ROS使用教程

    什么是资源编排服务? 阿里云资源编排服务(Resource Orchestration Service 简称 RO...

  • 阿里云资源编排ROS使用教程

    什么是资源编排服务? 阿里云资源编排服务(Resource Orchestration Service 简称 RO...

  • k8s服务编排-YAML

    YAML语法格式 资源对象Deployment 相关定义 创建Deployment 资源对象Service 相关定...

  • Service workers

    Service worker 用js控制页面请求的资源Service workers 本质上充当Web应用程序与浏...

  • 07.kubernetes笔记 Service(一) Clust

    目录: Service简介kube-proxy3种不同的数据调度模式Service资源的定义格式示例1: Clus...

网友评论

      本文标题:Service 资源

      本文链接:https://www.haomeiwen.com/subject/zdjxjrtx.html