2.8. 为应用程序部署负载均衡器
以下示例使用节点 IP 地址作为 LoadBalancer
服务配置文件的外部 IP 地址。使用本示例作为如何部署负载均衡器的指导。
先决条件
-
已安装 OpenShift CLI (
oc
)。 - 在使用 OVN-Kubernetes 网络插件配置的基础架构上安装集群。
-
KUBECONFIG
环境变量被设置。
流程
输入以下命令验证您的 pod 是否正在运行:
$ oc get pods -A
输出示例
NAMESPACE NAME READY STATUS RESTARTS AGE default i-06166fbb376f14a8bus-west-2computeinternal-debug-qtwcr 1/1 Running 0 46m kube-system csi-snapshot-controller-5c6586d546-lprv4 1/1 Running 0 51m kube-system csi-snapshot-webhook-6bf8ddc7f5-kz6k9 1/1 Running 0 51m openshift-dns dns-default-45jl7 2/2 Running 0 50m openshift-dns node-resolver-7wmzf 1/1 Running 0 51m openshift-ingress router-default-78b86fbf9d-qvj9s 1/1 Running 0 51m openshift-multus dhcp-daemon-j7qnf 1/1 Running 0 51m openshift-multus multus-r758z 1/1 Running 0 51m openshift-operator-lifecycle-manager catalog-operator-85fb86fcb9-t6zm7 1/1 Running 0 51m openshift-operator-lifecycle-manager olm-operator-87656d995-fvz84 1/1 Running 0 51m openshift-ovn-kubernetes ovnkube-master-5rfhh 4/4 Running 0 51m openshift-ovn-kubernetes ovnkube-node-gcnt6 1/1 Running 0 51m openshift-service-ca service-ca-bf5b7c9f8-pn6rk 1/1 Running 0 51m openshift-storage topolvm-controller-549f7fbdd5-7vrmv 5/5 Running 0 51m openshift-storage topolvm-node-rht2m 3/3 Running 0 50m
运行以下命令来创建命名空间:
$ NAMESPACE=<nginx-lb-test> 1
- 1
- 将 _<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
如果
LoadBalancer
服务成功将流量分发到应用程序,则上一命令的输出包含不同的 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