本指南介绍如何在 GKE on Bare Metal 集群中配置适用于 Kubernetes 的 OpenStack Cloud Provider。OpenStack Cloud Provider 必须配置为使用 OpenStack LBaaS 公开 Kubernetes Service。
前提条件
本指南假设您有一个在 OpenStack 环境中运行的 GKE on Bare Metal 集群,其设置类似于在 OpenStack 上部署 Google Distributed Cloud 指南。请先按照该指南操作,然后再尝试这些步骤。
配置 Provider
以下部分假定您从本地工作站的终端窗口开始。
对 OpenStack 客户端配置 (
openrc
) 文件执行 source 命令。您可以从 OpenStack 网页界面下载该文件。source PATH_TO_OPENRC_FILE/openrc
为 OpenStack Kubernetes Cloud Provider 创建配置文件。
cat > cloud.conf << EOF [Global] auth-url=${OS_AUTH_URL} username=${OS_USERNAME} password=${OS_PASSWORD} region=RegionOne tenant-name=admin domain-id=default # this is for using a self-signed cert if your using a CA then comment this line # and point to the CA certificate using the "ca-file" arg tls-Insecure=true [LoadBalancer] use-octavia=true # this is generally the public network on OpenStack floating-network-id=PUBLIC_NETWORK_ID # this should be private network subnet where vip is allocated for the ABM nodes subnet-id=ABM_NETWORK_SUBNET_ID [BlockStorage] bs-version=v2 EOF
请替换以下内容:
OS_AUTH_URL
、OS_USERNAME
、OS_PASSWORD
:这些变量应该已经通过对openrc
文件执行 source 命令在环境设置好。因此,它们将自动被提取。PUBLIC_NETWORK_ID
:这是 OpenStack 部署中用于分配浮动 IP 地址的可公开访问网络。Kubernetes Service 的LoadBalancer IPs
将从此网络分配。您可以使用单行命令从 OpenStack 环境中提取此 IP。ABM_NETWORK_SUBNET_ID
:这是 OpenStack 部署中专用网络上的子网,系统会从该子网为运行 Google Distributed Cloud 的虚拟机分配 IP。您可以使用类似于获取 OpenStack 中公共网络的 ID 的命令,从您的 OpenStack 环境中提取此 IP。
提取
abm-ws
虚拟机的公共浮动 IP 地址。export OPENSTACK_IPS=$(openstack floating ip list --tags=abm_ws_floatingip -f json) export FLOATING_IP=$(jq -c '.[]."Floating IP Address"' <<< $OPENSTACK_IPS | tr -d '"')
将
cloud.conf
文件复制到 OpenStack 中的abm-ws
虚拟机。scp ./cloud.conf ubuntu@$FLOATING_IP:~
使用 SSH 安全地连接到“
abm-ws
”虚拟机,然后以root
用户身份登录。Terraform 脚本配置的
root
用户是abm
。ssh ubuntu@$FLOATING_IP sudo -u abm -i
将
cloud.conf
文件复制到root
用户的$HOME
目录中。cp /home/ubuntu/cloud.conf $HOME
使用该配置创建
Kubernetes Secret
。# make sure the kubectl client is pointing towards your cluster export KUBECONFIG=~/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig # store the provider configurations as a Kubernetes secret kubectl create secret -n kube-system generic cloud-config --from-file=cloud.conf
安装适用于 Kubernetes 的 OpenStack Cloud Provider。
# create the necessary roles for the OpenStack provider kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/manifests/controller-manager/cloud-controller-manager-roles.yaml # create the required role-bindings for the OpenStack provider kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/manifests/controller-manager/cloud-controller-manager-role-bindings.yaml # create the OpenStack controller manager kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/manifests/controller-manager/openstack-cloud-controller-manager-ds.yaml
验证 OpenStack 集成
部署示例销售终端应用。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales.yaml
验证应用 pod 是否正在运行。
kubectl get pods
预期输出:
NAME READY STATUS RESTARTS AGE api-server-7db4777f7f-zflk5 1/1 Running 0 74s inventory-58c6fb5568-dqk2x 1/1 Running 0 74s payments-68d5d65d5c-5mjl6 1/1 Running 0 74s
通过
LoadBalancer
类型的服务公开了应用。kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales-service.yaml
尝试从浏览器访问该服务。
# wait for the external IP to be assigned kubectl get service api-server-lb NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE api-server-lb LoadBalancer 10.203.77.215 172.29.249.159 80:32378/TCP 4m12s
使用
EXTERNAL-IP
访问的销售终端应用。您可以访问 OpenStack 网页界面,在 OpenStack 中创建新的 OpenStack 负载平衡器。