K8s的Service资源是一种为一组功能相同的Pod提供统一不变的流量入口的资源。这里介绍其中的LoadBalance Service
概要
LoadBalance Service视作为对NodePort Service的拓展。在大多数K8s云提供商的环境中,K8s集群可以通过负载均衡器使得LoadBalance Service拥有一个公网IP。以便真正地对外暴露服务。但如果K8s在不支持LoadBalance Service的环境中运行,则不会调配负载均衡器。此时该服务将会表现的像是一个NodePort Service,因为LoadBalance Service是对NodePort Service的拓展。由于这里我们是通过Kind在本地搭建的K8s集群,故可以通过Metallb使得LoadBalance Service被分配一个外网IP
部署Metallb
「1. 下载配置文件」
通过下述链接分别下载Metallb命名空间、清单的YAML配置文件。保存到本地后,分别命名为01-metallb-namespace.yaml、02-metallb-manifest.yaml
# 配置文件1: Metallb的命名空间
https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml
# 配置文件2:Metallb的清单
https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml
「2. 应用配置文件」
通过kubectl apply命令依次应用上述两个配置文件
# 应用Metallb的命名空间
kubectl apply -f 01-metallb-namespace.yaml
# 应用Metallb的清单
kubectl apply -f 02-metallb-manifest.yaml
然后等待Metallb Pod的状态全部为 Running,如下所示
「3. 配置负载均衡器的IP地址池」
通过执行下述命令查看Docker中Kind网络的子网信息
# 查看Docker中Kind网络信息
docker network inspect -f '{{.IPAM.Config}}' kind
不能看出,在当前环境下,Docker中kind网络的子网地址为172.18.0.0/16
那么我们只需保证负载均衡器的IP地址池中的IP,全部在该网段下即可。故我们可以通过创建Configmap将Metallb配置为使用172.18.255.200~172.18.255.250范围的IP。配置文件03-metallb-configmap.yaml的完整内容如下所示
# 设置负载均衡器的IP地址池
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 172.18.255.200-172.18.255.250
同理,通过kubectl apply命令应用该配置文件即可
# 应用Metallb的Configmap
kubectl apply -f 03-metallb-configmap.yaml
效果如下所示
部署 LoadBalance Service
配置文件如下所示
# API组、版本
apiVersion: apps/v1
# 资源类型
kind: ReplicaSet
metadata:
# RS名称
name: my-kubia-rs-1
spec:
# 副本数量
replicas: 3
# 标签选择器
selector:
matchLabels:
app: kubia
# Pod 模板
template:
metadata:
# 标签信息
labels:
app: kubia
spec:
# 容器信息
containers:
- name: my-kubia-1
image: luksa/kubia
# 仅用于展示容器所使用的端口
ports:
- containerPort: 8080
protocol: TCP
---
# API组、版本
apiVersion: v1
# 资源类型
kind: Service
metadata:
# 资源名称
name: my-loadbalance-service-1
spec:
# Service类型
type: LoadBalancer
selector:
app: kubia
ports:
- port: 997 # 服务监听端口
targetPort: 8080 # 服务将请求转发到Pod的目标端口
# 在集群各节点所打开的端口, 使得可以通过集群中任一节点IP、nodePort端口号访问该服务
nodePort: 32329
效果如下所示,该服务的EXTERNAL-IP列显示已经被分配了一个外网IP
现在我们进行验证,先通过服务的集群IP、端口访问。效果如下所示
再通过集群节点IP、服务在节点上打开的端口来访问服务。效果如下所示
最后再通过服务的外网IP、端口来访问服务。效果如下所示
参考文献
-
Kubernetes in Action中文版 Marko Luksa著 -
深入剖析Kubernetes 张磊著
原文始发于微信公众号(青灯抽丝):Kubernetes Service之LoadBalance Service
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/41985.html