栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

04-Kubernetes中的Service

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

04-Kubernetes中的Service

1. 认识Service

Service 的意思是服务,在 Kubernetes 中,它被用来做服务发现功能,是将一组 Pods 公开为网络服务的抽象方法。

2. Service的类型 2.1 ClusterIP

ClusterIP 是Service的默认类型,在不做任何声明的情况下,默认是这种类型。这种类型的特点是,只允许在集群内访问,无法通过外部浏览器访问。

下面通过两种方式,暴露服务

方式一:命令行方式

#暴露服务
kubectl expose deployment my-dep --port=8000 --target-port=80
#或者
kubectl expose deployment my-dep --port=8000 --target-port=80 --type=ClusterIP

#使用标签检索Pod
kubectl get pod -l app=my-dep

方式二:yaml文件方式

(1)写一个 yaml 文件,如 service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-dep
  name: my-dep # 服务名
spec:
  ports:
  - port: 8000 # 服务暴露的端口
    protocol: TCP
    targetPort: 80 # Pod端口
  selector:
    app: my-dep # 部署的标签,要于deployment中的一致
  type: ClusterIP # 类型

(2)执行命令

kubectl apply -f service.yaml

(3)查看服务

kubectl get service 
#或者
kubectl get svc

注意点:

  • service的域名组成:服务名.所在命名空间.svc
  • 在集群内的任一个结点上,都可以通过 serviceIp:port 的方式访问到 Pod ,具体访问到哪一个 Pod,负载均衡随机
  • 在集群内的任一个结点上,都无法通过 service域名:port 的方式访问到 Pod
  • 进入到一个 Pod 内部后,可以通过serviceIp:port 或者 service域名:port 访问到某个服务下的 Pod(如,进入到 Vue 前端所在的 Pod 内部访问后端服务的 Pod)
2.2 NodePort

NodePort 这种类型在实际生产中,用的比较多,是为每个结点暴露出一个端口。

同样的,也可以通过两种方式,暴露服务

方式一:命令行方式

#暴露服务
kubectl expose deployment my-dep --port=8000 --target-port=80 --type=NodePort

方式二:yaml文件方式

(1)写一个 yaml 文件,如 service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 80
  selector:
    app: my-dep
  type: NodePort

(2)执行命令

kubectl apply -f service.yaml

(3)查看服务

kubectl get service 
#或者
kubectl get svc


以上面这个图为例,如果 Service 的类型是 NodePort ,那么在执行暴露服务的命令后,k8s 会相应地为每个结点开一个端口,这个端口的范围在 30000-32767 之间,如上图的是 30948 ,这个 30948 与我们指定的 8000 有个关联关系,对于集群外部而言,访问 30948 与在集群内部访问 8000,有一样的效果。

由于每个结点都有自己的一个公网 ip ,因此这个时候就可以通过外部浏览器访问 Pod 了。在浏览器中输入结点的公网 ip 以及 暴露的结点的端口,如 137.198.164.238:30948,然后回车,就会负载均衡地访问 Pod。

3. 几种端口的含义

port
port 是 k8s 集群内部访问 service 的端口

nodePort
nodePort 是外部访问 k8s 集群中 service 的端口

targetPort
targetPort 是 pod 的端口,从 port 和 nodePort 来的流量经过 kube-proxy 流入到后端 pod 的 targetPort

containerPort
containerPort 是 pod 内部容器的端口
注意:在 deployment.yaml 文件中,containerPort 指的是容器对外暴露的端口,这个时候也可以理解为该端口就是 pod 的端口

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/861056.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号