1.8. 为工作负载部署负载均衡器
红帽构建的 MicroShift 提供了网络负载均衡器的内置实现。以下示例使用节点 IP 地址作为 LoadBalancer
服务配置文件的外部 IP 地址。
先决条件
-
已安装 OpenShift CLI (
oc
)。 - 您可以使用具有集群管理角色的用户访问集群。
- 在使用 OVN-Kubernetes 网络插件配置的基础架构上安装集群。
-
KUBECONFIG
环境变量被设置。
流程
运行以下命令验证您的 pod 是否正在运行:
$ oc get pods -A
运行以下命令来创建示例命名空间:
$ NAMESPACE=nginx-lb-test
$ oc create ns $NAMESPACE
以下示例在命名空间中部署测试
nginx
应用程序的三个副本:$ oc apply -n $NAMESPACE -f - <<EOF apiVersion: v1 kind: ConfigMap metadata: name: nginx data: headers.conf: | add_header X-Server-IP \$server_addr always; --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: quay.io/packit/nginx-unprivileged imagePullPolicy: Always name: nginx ports: - containerPort: 8080 volumeMounts: - name: nginx-configs subPath: headers.conf mountPath: /etc/nginx/conf.d/headers.conf securityContext: allowPrivilegeEscalation: false seccompProfile: type: RuntimeDefault capabilities: drop: ["ALL"] runAsNonRoot: true volumes: - name: nginx-configs configMap: name: nginx items: - key: headers.conf path: headers.conf EOF
您可以运行以下命令来验证三个副本是否已成功启动:
$ oc get pods -n $NAMESPACE
使用以下示例命令为
nginx
测试应用程序创建LoadBalancer
服务:$ oc create -n $NAMESPACE -f - <<EOF apiVersion: v1 kind: Service metadata: name: nginx spec: ports: - port: 81 targetPort: 8080 selector: app: nginx type: LoadBalancer EOF
注意您必须确保
port
参数是一个主机端口,不被其他LoadBalancer
服务或 MicroShift 组件的红帽构建。运行以下命令,验证服务文件是否存在,是否正确分配了外部 IP 地址,并且外部 IP 与节点 IP 相同:
$ oc get svc -n $NAMESPACE
输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx LoadBalancer 10.43.183.104 192.168.1.241 81:32434/TCP 2m
验证
以下命令使用
LoadBalancer
服务配置的外部 IP 地址形成五个到示例nginx
应用程序的连接。命令的结果是这些服务器 IP 地址的列表。使用以下命令验证负载均衡器是否向所有正在运行的应用程序发送请求:EXTERNAL_IP=192.168.1.241 seq 5 | xargs -Iz curl -s -I http://$EXTERNAL_IP:81 | grep X-Server-IP
如果负载均衡器成功将流量分发到应用程序,则上一命令的输出包含不同的 IP 地址,例如:
输出示例
X-Server-IP: 10.42.0.41 X-Server-IP: 10.42.0.41 X-Server-IP: 10.42.0.43 X-Server-IP: 10.42.0.41 X-Server-IP: 10.42.0.43