服务
请参阅更多信息,了解如何在集群中添加支持的服务。
摘要
第 1 章 服务概述
您可以添加用于 Red Hat Advanced Cluster Management for Kubernetes 的服务,这些服务可以提高某些性能。服务在一个受管集群或多个受管集群中运行。
以下小节提供了 Red Hat Advanced Cluster Management 可用的服务概述:
1.1. Submariner 网络服务(技术预览)
submariner-addon
组件是一个技术预览功能。
Submariner 服务是一个开源工具,可与 Red Hat Advanced Cluster Management for Kubernetes 一起使用,用于为您的环境中两个或多个 Kubernetes 集群(内部环境或云)提供 Pod 之间的直接联网。有关 Submariner 的更多信息,请参阅 Submariner 的网站。
您可以在以下环境中托管的 OpenShift Container Platform 集群上启用 Submariner:
- Amazon Web Services (AWS)
- Google Cloud Platform (GCP)
- IBM Cloud
- Microsoft Azure
- Red Hat OpenShift Dedicated
- VMware vSphere
Red Hat Advanced Cluster Management for Kubernetes 提供了一个 Submariner 组件,您可以使用 hub 集群在环境中部署。
1.1.1. 先决条件
在使用 Submariner 前,请确保已满足以下先决条件:
- 在 Red Hat OpenShift Container Platform 版本 4.6 或更高版本上运行的 Red Hat Advanced Cluster Management hub 集群,Kubernetes 版本 1.19 或更高版本。
-
使用
cluster-admin
权限访问 hub 集群的凭证。 - 在 OpenShift Container Platform 版本 4.4 或更高版本上运行的两个或者两个以上 OpenShift Container Platform 受管集群,Kubernetes 版本 1.17 或更高版本,由 Red Hat Advanced Cluster Management hub 集群管理。
- 集群的非覆盖 pod 和服务无类别间路由(CIDR)范围。注: 名为 Globalnet 的上游功能允许重叠的 CIDR,但目前不支持与 Red Hat Advanced Cluster Management 搭配使用。
- 在网关节点之间配置了 IP 连接。连接两个集群时,网关节点必须可使用分配给网关节点的公共或私有 IP 地址访问至少一个集群。如需更多信息,请参阅 Submariner NAT Traversal。
- 各个受管集群中所有节点的防火墙配置必须同时允许 4800/UDP。
- 网关节点上的防火墙配置允许入口 8080/TCP,以便集群中的其他节点可以访问它。
为 4500/UDP 以及网关节点上 IPsec 流量的其他端口打开防火墙配置。
注:当您的集群部署在 AWS 或 GCP 环境中时,这会自动配置,但必须为其他环境中的集群以及保护私有云的防火墙手动配置。
表 1.1. Submariner 需要的端口 名称 默认值 Customizable IPsec NATT
4500/UDP
是
VXLAN
4800/UDP
否
Submariner 指标端口
8080/TCP
否
有关先决条件的详情,请参阅 Submariner 的上游先决条件文档。
1.1.2. 准备所选主机来部署 Submariner
在 Microsoft Azure、IBM Cloud 或 Red Hat OpenShift Dedicated 上使用 Red Hat Advanced Cluster Management for Kubernetes 部署 Submariner 前,您必须在托管环境中手动为连接准备集群。不同主机环境的要求有所不同,因此请按照您的托管环境说明进行操作。
1.1.2.1. 准备 Microsoft Azure 以部署 Submariner
要准备 Microsoft Azure 上的集群来部署 Submariner 组件,请完成以下步骤:
在 Microsoft Azure 环境中创建入站和出站防火墙规则,以打开 IP 安全 NAT 遍历端口(默认为 4500/UDP)以启用 Submariner 通信:
# Create inbound NAT rule $ az network lb inbound-nat-rule create --lb-name <lb-name> \ --resource-group <res-group> \ --name <name> \ --protocol Udp --frontend-port <ipsec-port> \ --backend-port <ipsec-port> \ --frontend-ip-name <frontend-ip-name> # Add VM network interface to the just-created inbound NAT rule $ az network nic ip-config inbound-nat-rule add \ --lb-name <lb-name> --resource-group <res-group> \ --inbound-nat-rule <nat-name> \ --nic-name <nic-name> --ip-config-name <pipConfig>
将
lb-name
替换为您的负载均衡器名称。将
res-group
替换为您的资源组名称。使用负载平衡入站 NAT 规则名称替换替换
nat-name
。使用您的 IPsec 端口替换
ipsec-port
。将
pipConfig
替换为集群前端 IP 配置名称。将
nic-name
替换为您的网卡(NIC)。创建一个负载均衡入站 NAT 规则以转发 Submariner 网关指标服务请求:
# Create inbound NAT rule $ az network lb inbound-nat-rule create --lb-name <lb-name> \ --resource-group <res-group> \ --name <name> \ --protocol Tcp --frontend-port 8080 --backend-port 8080 \ --frontend-ip-name <frontend-ip-name> # Add VM network interface to the just-created inbound NAT rule $ az network nic ip-config inbound-nat-rule add \ --lb-name <lb-name> --resource-group <res-group> \ --inbound-nat-rule <nat-name> \ --nic-name <nic-name> --ip-config-name <pipConfig>
将
lb-name
替换为您的负载均衡器名称。将
res-group
替换为您的资源组名称。使用负载平衡入站 NAT 规则名称替换替换
nat-name
。将
pipConfig
替换为集群前端 IP 配置名称。将
nic-name
替换为您的网卡(NIC)。在 Azure 上创建网络安全组(NSG)安全规则,为 Submariner 打开 NAT 遍历端口(默认为 4500/UDP):
$ az network nsg rule create --resource-group <res-group> \ --nsg-name <nsg-name> --priority <priority> \ --name <name> --direction Inbound --access Allow \ --protocol Udp --destination-port-ranges <ipsec-port> $ az network nsg rule create --resource-group <res-group> \ --nsg-name <nsg-name> --priority <priority> \ --name <name> --direction Outbound --access Allow \ --protocol Udp --destination-port-ranges <ipsec-port>
将
res-group
替换为您的资源组名称。使用您的 NSG 名称替换
nsg-name
。将
priority
替换为您的规则优先级。使用您的规则名称替换
name
。使用您的 IPsec 端口替换
ipsec-port
。创建 NSG 规则以打开 4800/UDP 端口,将来自 worker 和 master 节点的 pod 流量封装到 Submariner 网关节点:
$ az network nsg rule create --resource-group <res-group> \ --nsg-name <nsg-name> --priority <priority> \ --name <name> --direction Inbound --access Allow \ --protocol Udp --destination-port-ranges 4800 \ $ az network nsg rule create --resource-group <res-group> \ --nsg-name <nsg-name> --priority <priority> \ --name <name> --direction Outbound --access Allow \ --protocol Udp --destination-port-ranges 4800
将
res-group
替换为您的资源组名称。使用您的 NSG 名称替换
nsg-name
。将
priority
替换为您的规则优先级。使用您的规则名称替换
name
。创建 NSG 规则以打开 8080/TCP 端口,从 Submariner Gateway 节点导出指标服务:
$ az network nsg rule create --resource-group <res-group> \ --nsg-name <nsg-name> --priority <priority> \ --name <name> --direction Inbound --access Allow \ --protocol Tcp --destination-port-ranges 8080 \ $ az network nsg rule create --resource-group <res-group> \ --nsg-name <nsg-name> --priority <priority> \ --name <name> --direction Outbound --access Allow \ --protocol Udp --destination-port-ranges 8080
将
res-group
替换为您的资源组名称。使用您的 NSG 名称替换
nsg-name
。将
priority
替换为您的规则优先级。使用您的规则名称替换
name
。-
使用以下标签
submariner.io/gateway=true
标记集群中的 worker 节点。
1.1.2.2. 准备 IBM Cloud 来部署 Submariner
IBM Cloud 上有两种 Red Hat OpenShift Kubernetes Service(ROKS):经典(classic)集群,以及在虚拟私有云(VPC)中的第二代计算基础架构。因为无法为经典集群配置 IPsec 端口,所以 Submariner无法在典型的 ROKS 集群上运行。
要将 VPC 上的 ROKS 集群配置为使用 Submariner,请完成以下链接中的步骤:
1.1.2.3. 准备 Red Hat OpenShift Dedicated 来部署 Submariner
Red Hat OpenShift Dedicated 支持由 AWS 和 Google Cloud Platform 置备的集群。
1.1.2.3.1. 准备 Red Hat OpenShift Dedicated 在 AWS 上部署 Submariner
要在 Red Hat OpenShift Dedicated 上配置 AWS 集群,请完成以下步骤:
-
向 Red Hat OpenShift Hosted SRE 支持团队提交支持问题单,以便获取 Red Hat OpenShift Dedicated 集群的
cluster-admin
组访问权限。dedicated-admin
的默认访问权限并没有包括创建MachineSet
所需的权限。 -
创建组后,在完成 Red Hat OpenShift Dedicated 文档中的为用户分配 cluster-admin 角色
的步骤时创建的
cluster-admin 组中添加用户名。 -
配置用户
osdCcsAdmin
的凭证,以便将该用户用作服务帐户。 - 将集群导入到 Red Hat Advanced Cluster Management,并按照使用控制台部署 Submariner 中的说明进行操作。
1.1.2.3.2. 准备 Red Hat OpenShift Dedicated 在 Google Cloud Platform 上部署 Submariner
要在 Red Hat OpenShift Dedicated 上配置 Google Cloud Platform 集群,请完成以下步骤:
-
配置名为
osd-ccs-admin
的服务帐户,可用于管理部署。 - 将集群导入到 Red Hat Advanced Cluster Management,并按照使用控制台部署 Submariner 中的说明进行操作。
1.1.3. 使用控制台部署 Submariner
submariner-addon
组件是一个技术预览功能。
您可以使用 Red Hat Advanced Cluster Management for Kubernetes 控制台,在 Amazon Web Services、Google Cloud Platform 和 VMware vSphere 上部署的 Red Hat OpenShift Container Platform 受管集群上部署 Submariner。要将 Submariner 部署到其他提供程序上,请按照使用 API 部署 Submariner 中的说明操作。完成以下步骤,使用 Red Hat Advanced Cluster Management for Kubernetes 控制台部署 Submariner:
需要的访问权限:集群管理员
- 在控制台导航菜单中选择 Infrastructure > Clusters。
- 在 Clusters 页面上,选择 Cluster sets 选项卡。要使用 Submariner 启用的集群必须位于同一集群集合中。
- 如果要在其上部署 Submariner 的集群已位于同一集群集中,请跳至第 5 步来部署 Submariner。
如果要在其上部署 Submariner 的集群不在同一个集群集中,请完成以下步骤为它们创建一个集群集:
- 选择 Create cluster set。
- 对集群集进行命名,然后选择 Create。
- 选择 Manage resource assignments 以将集群分配到集群集。
- 选择您要与 Submariner 连接的受管集群,将它们添加到集群集合中。
- 选择 Review 来查看并确认您选择的集群。
- 选择 Save 保存集群集,并查看生成的集群设置页面。
- 在集群集页面中,选择 Submariner add-ons 选项卡。
- 选择 Install Submariner add-ons。
- 选择您要在其上部署 Submariner 的集群。
在 Install Submariner add-ons 编辑器中输入以下信息 :
-
AWS Access Key ID
- 此字段仅在导入 AWS 集群时可见。 -
AWS Secret Access Key
- 此字段仅在导入 AWS 集群时可见。 -
Google Cloud Platform service account JSON key
- 此字段仅在导入 Google Cloud Platform 集群时可见。 -
Instance type
- 在受管集群中创建的网关节点的 Amazon Web Services EC2 实例类型。默认值为c5d.large
。只有在受管集群环境是 AWS 时,此字段才可见。 -
IPsec NAT-T port
- IPsec NAT 遍历端口的默认值是4500
。如果您的受管集群环境是 VMware vSphere,请确保在防火墙中打开此端口。 -
网关数
- 用于在受管集群中部署 Submariner 网关组件的 worker 节点数量。默认值为1
。如果值大于 1,则会自动启用 Submariner 网关高可用性(HA)。 -
Cable driver
- 维护跨集群隧道的 Submariner 网关电缆引擎组件。默认值为Libreswan IPsec
。
-
- 在编辑器末尾选择 Next 以移动到下一个集群的编辑器,并为您选择的每个剩余的集群完成这个步骤。
- 验证每个受管集群的配置。
点 Install 在所选受管集群上部署 Submariner。
安装和配置完成可能需要几分钟时间。您可以在 Submariner add-ons 选项卡中的列表中检查 Submariner 状态:
-
连接状态
指示在受管集群中建立多少个 Submariner 连接。 -
代理状态
代表 Submariner 是否成功部署到受管集群中。控制台可能会报告Degraded
状态,直到安装和配置为止。 -
Gateway nodes labeled
表示有多少个 worker 节点使用 Submariner 网关标签:submariner.io/gateway=true
。
-
Submariner 现在在集群中部署。
1.1.4. 使用 API 部署 Submariner
在使用 Red Hat Advanced Cluster Management for Kubernetes 部署 Submariner 前,您必须在托管环境中为连接准备集群。目前,您可以使用 SubmarinerConfig
API 在 Amazon Web Services、Google Cloud Platform 和 VMware vSphere 上自动准备集群。对于其他平台,您需要手动进行准备,请参阅准备主机以部署 Submariner 的步骤。
1.1.4.1. 准备主机来部署 Submariner
在使用 Red Hat Advanced Cluster Management 部署 Submariner 前,您必须在托管环境中为连接准备集群。不同主机环境的要求各不相同,因此请按照您的托管环境说明进行操作。
1.1.4.1.1. 准备 Amazon Web Services 以部署 Submariner
您可以使用 SubmarinerConfig
API 将 AWS 集群配置为与 Submariner 部署集成。按照适用于您的情况的步骤,准备 AWS 来安装 Submariner:
如果没有使用 Red Hat Advanced Cluster Management 创建受管集群,则必须在包含 AWS 凭证 secret 的受管集群的命名空间中手动在 hub 集群中创建一个 secret。如果使用 Red Hat Advanced Cluster Management 创建集群,则跳至第 2 步。
要创建 secret,输入一个包含类似以下示例和 YAML 的信息的命令:运行命令以应用该文件:
export AWS_ACCESS_KEY_ID=<aws-access-key-id> export AWS_SECRET_ACCESS_KEY=<aws-secret-access-key> cat << EOF | oc apply -f -
apiVersion: v1 kind: Secret metadata: name: <managed-cluster-name>-aws-creds namespace: <managed-cluster-namespace> type: Opaque data: aws_access_key_id: $(echo -n ${AWS_ACCESS_KEY_ID} | base64 -w0) aws_secret_access_key: $(echo -n ${AWS_SECRET_ACCESS_KEY} | base64 -w0) EOF
将
managed-cluster-name
替换为受管集群的名称。将
managed-cluster-namespace
替换为受管集群的命名空间。使用 AWS 访问密钥 ID 替换
aws-access-key-id
。使用 AWS 访问密钥替换
aws-secret-access-key
。如果您使用 Red Hat Advanced Cluster Management 创建受管集群,或者在上一步中创建 secret 后,输入类似以下示例和 YAML 的命令来准备集群:运行命令以应用该文件:
cat << EOF | oc apply -f -
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: gatewayConfig: aws: instanceType: c5d.large credentialsSecret: name: <managed-cluster-name>-aws-creds EOF
将
managed-cluster-namespace
替换为受管集群的命名空间。将
managed-cluster-name
替换为受管集群的名称。managed-cluster-name-aws-creds
的值是 AWS 凭证 secret 名称,您可以在 hub 集群的集群命名空间中找到该名称。注:
SubmarinerConfig
的名称必须是submariner
,如示例中所示。此配置会自动打开 Submariner 所需的端口:网络地址转换 - 遍历 (NATT) 端口 (4500/UDP)、虚拟可扩展 LAN (VXLAN) 端口 (4800/UCP),以及 AWS 实例上的 Submariner 指标端口 (8080/TCP)。它还创建一个 AWS 实例,作为 AWS 实例类型为
c5d.large
的 Submariner 网关。如果要自定义 NATT 端口,请输入一个包含类似以下示例和 YAML 信息的命令。运行命令以应用该文件:
cat << EOF | oc apply -f -
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: credentialsSecret: name: <managed-cluster-name>-aws-creds IPSecNATTPort: <NATTPort> EOF
将
managed-cluster-namespace
替换为受管集群的命名空间。将
managed-cluster-name
替换为受管集群的名称。managed-cluster-name-aws-creds
的值是 AWS 凭证 secret 名称,您可以在 hub 集群的集群命名空间中找到该名称。将
NATTPort
替换为您要使用的 NATT 端口。注:
SubmarinerConfig
的名称必须是submariner
,如示例中所示。如果要自定义网关节点的 AWS 实例类型,请输入一个包含类似以下示例的信息的命令。运行命令以应用该文件:
cat << EOF | oc apply -f -
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: credentialsSecret: name: <managed-cluster-name>-aws-creds gatewayConfig: instanceType: <instance-type> EOF
将
managed-cluster-namespace
替换为受管集群的命名空间。将
managed-cluster-name
替换为受管集群的名称。managed-cluster-name-aws-creds
的值是 AWS 凭证 secret 名称,您可以在 hub 集群的集群命名空间中找到该名称。使用您要使用的 AWS 实例类型替换 instance-type。
注:
SubmarinerConfig
的名称必须是submariner
,如示例中所示。如果要自定义网关节点的数量,请输入一个包含类似以下示例的信息的命令。运行命令以应用该文件:
cat << EOF | oc apply -f -
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: credentialsSecret: name: <managed-cluster-name>-aws-creds gatewayConfig: gateways: <gateways> EOF
+ 将
managed-cluster-namespace
替换为受管集群的命名空间。+ 将
managed-cluster-name
替换为受管集群的名称。managed-cluster-name-aws-creds
的值是 AWS 凭证 secret 名称,您可以在 hub 集群的集群命名空间中找到该名称。+ 使用您要使用的网关数量替换
gateway
。如果值大于 1,则 Submariner 网关会自动启用高可用性。+ 注:
SubmarinerConfig
的名称必须是submariner
,如示例中所示。
1.1.4.1.2. 准备 Google Cloud Platform 以部署 Submariner
您可以使用 SubmarinerConfig
API 配置 Google Cloud Platform 集群,使其与 Submariner 部署集成。按照适用于您情况的步骤准备 Google Cloud Platform 以安装 Submariner:
如果没有使用 Red Hat Advanced Cluster Management 创建受管集群,您必须在包含 Google Cloud Platform 凭证 secret 的受管集群的命名空间中手动在 hub 集群中创建一个 secret。如果使用 Red Hat Advanced Cluster Management 创建集群,则跳至第 2 步。
要创建 secret,输入一个包含类似以下示例的信息的命令。运行命令以应用该文件。运行命令以应用该文件:
cat << EOF | oc apply -f -
apiVersion: v1 kind: Secret metadata: name: <managed-cluster-name>-gcp-creds namespace: <managed-cluster-namespace> type: Opaque data: osServiceAccount.json: <gcp-os-service-account-json-file-content> EOF
将
managed-cluster-name
替换为受管集群的名称。managed-cluster-name-aws-creds
的值是 Google Cloud Platform 凭证 secret 名称,您可以在 hub 集群的集群命名空间中找到该 secret。将
managed-cluster-namespace
替换为受管集群的命名空间。将
gcp-os-service-account-json-file-content
替换为您编码的 Google Cloud PlatformosServiceAccount.json: $(base64 -w0)
文件的内容。如果您使用 Red Hat Advanced Cluster Management 创建受管集群,或者已在上一步中创建了 secret,请输入类似以下示例的命令来准备集群。运行命令以应用该文件。运行命令以应用该文件:
cat << EOF | oc apply -f -
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: credentialsSecret: name: <managed-cluster-name>-gcp-creds EOF
将
managed-cluster-namespace
替换为受管集群的命名空间。将
managed-cluster-name
替换为受管集群的名称。managed-cluster-name-gcp-creds
的值是 Google Cloud Platform 凭证 secret 名称,您可以在 hub 集群的集群命名空间中找到该 secret。注:
SubmarinerConfig
的名称必须是submariner
,如示例中所示。此配置会自动打开 Submariner 所需的端口:网络地址转换 - 遍历 (NATT) 端口 (4500/UDP)、虚拟可扩展 LAN (VXLAN) 端口 (4800/UCP),以及 Google Cloud Platform 实例上的 Submariner 指标端口 (8080/TCP)。它还将一个 worker 节点标记为 Submariner 网关,并在 Google Cloud Platform 集群中启用此节点的公共 IP 地址。
如果要自定义 NATT 端口,请输入包含类似以下示例的信息的命令。运行命令以应用该文件。运行命令以应用该文件:
cat << EOF | oc apply -f -
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: credentialsSecret: name: <managed-cluster-name>-gcp-creds IPSecNATTPort: <NATTPort> EOF
将
managed-cluster-namespace
替换为受管集群的命名空间。将
managed-cluster-name
替换为受管集群的名称。managed-cluster-name-gcp-creds
的值是 Google Cloud Platform 凭证 secret 名称,您可以在 hub 集群的集群命名空间中找到该 secret。将
NATTPort
替换为您要使用的 NATT 端口。注:
SubmarinerConfig
的名称必须是submariner
,如示例中所示。- 如果要自定义网关节点的数量,请输入一个包含类似以下示例的信息的命令。运行命令以应用该文件。运行命令以应用该文件:
cat << EOF | oc apply -f -
+
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: credentialsSecret: name: <managed-cluster-name>-gcp-creds gatewayConfig: gateways: <gateways> EOF
+ 将
managed-cluster-namespace
替换为受管集群的命名空间。+ 将
managed-cluster-name
替换为受管集群的名称。managed-cluster-name-aws-creds
的值是 Google Cloud Platform 凭证 secret 名称,您可以在 hub 集群的集群命名空间中找到该 secret。+ 使用您要使用的网关数量替换
gateway
。如果值大于 1,则 Submariner 网关会自动启用高可用性。
1.1.4.1.3. 准备在 VMware vSphere 上部署 Submariner
Submariner 使用 IPsec 在网关节点上的集群之间建立安全隧道。您可以使用默认端口或指定自定义端口。当您运行这个步骤时,没有指定 IPsec NATT 端口,默认端口会自动用于通信。默认端口为 4500/UDP。
Submariner 使用虚拟可扩展 LAN (VXLAN) 在流量从 worker 和 master 节点移动到网关节点时封装流量。VXLAN 端口无法自定义,并且始终是端口 4800/UDP。
Submariner 使用 8080/TCP 在集群中的节点之间发送其指标信息,此端口无法自定义。
在启用 Submariner 前,VMWare vSphere 管理员必须打开以下端口:
名称 | 默认值 | Customizable |
---|---|---|
IPsec NATT | 4500/UDP | 是 |
VXLAN | 4800/UDP | 否 |
Submariner 指标 | 8080/TCP | 否 |
要准备 VMware vSphere 集群以部署 Submariner,请完成以下步骤:
- 确保 IPsec NATT、VXLAN 和指标端口已打开。
输入一个包含类似以下示例信息的命令,以应用 YAML 示例。运行命令以应用该文件:
cat << EOF | oc apply -f -
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec:{} EOF
将
managed-cluster-namespace
替换为受管集群的命名空间。注:
SubmarinerConfig
的名称必须是submariner
,如示例中所示。此配置对 Submariner 使用默认的网络地址转换 - 遍历 (NATT) 端口 (4500/UDP),并在 vSphere 集群中使用一个 worker 节点作为 Submariner 网关。
Submariner 使用 IP 安全 (IPsec) 在网关节点上的集群之间建立安全隧道。您可以使用默认 IPsec NATT 端口,或者指定您配置的不同端口。当您运行这个步骤时,没有指定 IPsec NATT 端口 4500/UDP,将自动用于通信。
如果要自定义 NATT 端口,请输入包含类似以下示例的信息的命令。运行命令以应用该文件:
cat << EOF | oc apply -f -
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: IPSecNATTPort: <NATTPort> EOF
+ 将
managed-cluster-namespace
替换为受管集群的命名空间。+ 将
NATTPort
替换为您要使用的 NATT 端口。+ 注:
SubmarinerConfig
的名称必须是submariner
,如示例中所示。如果要自定义网关节点的数量,请输入一个包含类似以下示例的信息的命令。运行命令以应用该文件:
cat << EOF | oc apply -f -
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: gatewayConfig: gateways: <gateways> EOF
将
managed-cluster-namespace
替换为受管集群的命名空间。使用您要使用的网关数量替换
gateway
。如果值大于 1,则 Submariner 网关会自动启用高可用性。
1.1.4.2. 使用 ManagedClusterAddOn API 部署 Submariner
要使用 ManagedClusterAddOn
API 部署 Submariner,请完成以下步骤:
使用 创建和管理 ManagedClusterSets 中的说明在 hub 集群上创建一个
ManagedClusterSet
。ManagedClusterSet
的条目应类似以下内容:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: ManagedClusterSet metadata: name: <managed-cluster-set-name>
将
managed-cluster-set-name
替换为您要创建的ManagedClusterSet
的名称。注:Kubernetes 命名空间名称的最大长度为 63 个字符,因此
<managed-cluster-set-name>
的最大长度为 56 个字符。如果<managed-cluster-set-name>
的长度超过 56,则<managed-cluster-set-name>
将从头截断。创建
ManagedClusterSet
后,submariner-addon
会创建一个名为<managed-cluster-set-name>-broker
的命名空间,并将 Submariner 代理部署到其中。输入以下命令在
ManagedClusterSet
中添加一个受管集群:oc label managedclusters <managed-cluster-name> "cluster.open-cluster-management.io/clusterset=<managed-cluster-set-name>" --overwrite
将
<managed-cluster-name>
替换为您要添加到ManagedClusterSet
的受管集群的名称。将
<managed-cluster-set-name>
替换为您要添加受管集群的ManagedClusterSet
的名称。输入以下命令在受管集群中部署 Submariner:
cat << EOF | oc apply -f -
apiVersion: addon.open-cluster-management.io/v1alpha1 kind: ManagedClusterAddOn metadata: name: submariner namespace: <managed-cluster-name> spec: installNamespace: submariner-operator EOF
将
managed-cluster-name
替换为您要使用 Submariner 的受管集群的名称。ManagedClusterAddOn
的 spec 中的installNamespace
字段是在受管集群上安装 Submariner 的命名空间。目前,Submariner 必须安装到submariner-operator
命名空间中。创建
ManagedClusterAddOn
后,submariner-addon
将 Submariner 部署到受管集群上的submariner-operator
命名空间。您可以从这个ManagedClusterAddOn
的状态查看 Submariner 的部署状态。注:
ManagedClusterAddOn
的名称必须是submariner
。- 对要启用 Submariner 的所有受管集群重复步骤 2 和 3。
在受管集群中部署了 Submariner 后,您可以通过输入以下命令检查 submarinerr
ManagedClusterAddOn
的状态来验证 Submariner 部署状态:oc -n <managed-cluster-name> get managedclusteraddons submariner -oyaml
将
managed-cluster-name
替换为受管集群的名称。在 Submariner
ManagedClusterAddOn
的状态中,三个条件代表 Submariner 的部署状态:-
SubmarinerGatewayNodesLabeled
条件代表受管集群中是否存在标记为 Submariner 网关节点。 -
SubmarinerAgentDegraded
条件指示 Submariner 是否成功部署到受管集群中。 -
SubmarinerConnectionDegraded
条件指示受管集群上使用 Submariner 建立多少连接。
-
1.1.4.3. 自定义 Submariner 部署
您可以自定义 Submariner 部署的一些设置。
1.1.4.3.1. 电缆驱动程序
Submariner Gateway Engine 组件为其他集群创建安全隧道。电缆驱动程序组件使用网关引擎组件中的可插拔架构维护隧道。您可以使用 Libreswan 或 VXLAN 实现来 电缆
引擎组件的电缆驱动程序配置。请参见以下示例:
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: cableDriver: vxlan credentialsSecret: name: <managed-cluster-name>-<provider>-creds
最佳实践: 不要在公共网络上使用 VXLAN 电缆驱动程序。VXLAN 电缆驱动程序未加密。只有使用 VXLAN 来避免在专用网络上不必要的双加密。例如,一些内部环境可能会使用专用线级硬件设备来处理隧道的加密。
1.1.5. 为 Submariner 启用服务发现
submariner-addon
组件是一个技术预览功能。
在 Submariner 部署到与受管集群相同的环境中后,会将路由配置为 ManagedClusterSet
中的 pod 和服务间的安全 IP 路由。如果要使集群的服务可见,并可以被 ManagedClusterSet
中的其他集群发现,您需要创建一个 ServiceExport
对象。当使用 ServiceExport
对象导出一个服务后,您可以使用以下方式访问该服务: <service>.<namespace>.svc.clusterset.local
。如果多个集群导出具有相同名称的服务,并且来自同一命名空间中,则其他集群会把这个服务看作为一个单一的逻辑服务。
在本例在,在 default
命名空间中使用 nginx
服务,但您可以发现任何 Kubernetes ClusterIP
服务或无头服务:
使用以下命令,在
ManagedClusterSet
中的受管集群中应用nginx
服务实例:oc -n default create deployment nginx --image=nginxinc/nginx-unprivileged:stable-alpine oc -n default expose deployment nginx --port=8080
通过创建一个
ServiceExport
条目来导出服务,该条目类似于 YAML 文件中的以下内容:apiVersion: multicluster.x-k8s.io/v1alpha1 kind: ServiceExport metadata: name: <service-name> namespace: <service-namespace>
使用您要导出的服务的名称替换
service-name
。在本例中是nginx
。将service-namespace
替换为服务所在命名空间的名称。在本例中,是default
。在不同的受管集群中运行以下命令,确认它可以访问
nginx
服务:oc -n default run --generator=run-pod/v1 tmp-shell --rm -i --tty --image quay.io/submariner/nettest -- /bin/bash curl nginx.default.svc.clusterset.local:8080
nginx
服务发现现在已为 Submariner 配置。