安装 Submariner¶
本页介绍如何安装 Submariner。
前置条件¶
- 至少准备两个集群,可将 submariner-k8s-broker 部署在其中一个集群中,也可以单独部署在其他集群,submariner-operator 部署在每个 join 的子集群中。子集群和 submariner-k8s-broke 部署的集群之间应能够正常通讯
- 不同子集群的子网最好不要重叠, 否则需要启用 Globalnet 功能, 而 Globalnet 功能有一定的限制
- 支持的 CNI 列表为:- OpenShift-SDN
- Weave
- Flannel
- Canal
- Calico(存在兼容性问题,需要手动规避,参考使用说明)
- OVN(要求 OVN NorthBound DB 的版本 > 6.1.0+)
 
- Kube-proxy 的模式必须为 IPtables,IPvs模式目前尚不支持
- 集群内部需要允许 Vxlan的流量,集群外部需要放通 udp/4500 端口
Submariner 现在处于比较早期的阶段, 出现 Bug 比较常见。
安装步骤¶
Note
submariner-k8s-broker 可以部署在一个单独的集群,也可以部署在 Join 的子集群中。本文以 submariner-k8s-broker 部署在一个单独的集群为例,展示安装过程。
请确认您的集群已成功接入容器管理平台,然后执行以下步骤首先安装 submariner-k8s-broker:
- 
在左侧导航栏点击 容器管理—>集群列表, 然后找到准备安装submariner-k8s-broker的集群名称。
- 
在左侧导航栏中选择 Helm 应用->Helm 模板,找到并点击submariner-k8s-broker。 
- 
在版本选择中选择希望安装的版本,点击安装。 
- 
推荐安装到 submariner-k8s-broker命名空间下: 
- 
下图所示配置无需更改,保持默认参数即可:  
- 
在 Broker 集群成功安装 submariner-k8s-broker: 
- 
切换到其中子集群:master01,安装 submariner-operator: 
- 
在版本选择中选择希望安装的版本,点击安装。 
- 
推荐安装到 submariner-operator命名空间下,开启就绪等待: 
- 
配置 submariner-operator连接 Broker 集群的配置: 上面的参数说明: - 
Broker—>brokerK8sApiServer:Broker 集群 API-Server 的地址,可以通过以下方式获取:
- 
Broker—>brokerK8sCA:访问 Broker 集群 API-Server 的客户端证书,可以通过以下方式获取:# 在安装 submariner-k8s-broker 的集群上 [root@broker ~]# kubectl -n submariner-k8s-broker get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='submariner-k8s-broker-client')].data['ca\.crt']}" LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1ESXlNakV3TkRjek5Wb1hEVE16TURJeE9URXdORGN6TlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTVFLCmRVUHZoeDNOcFRXeGU0STZNV1I1VFU0VThJeVhBeWF6ZXJRRnhZK3l5Q3F1NnhFOUUwTDRSbUdxS0pyTFRSVWYKQi85YmowcWRaNFRJd2FTTmN3cGVqanYxYllTaVVKV0NsT0dXbTdLWUd4UnhCMEZFbVlCaGovT29HWGJhaEw5eQpqR1A1VjFsYTMxYlhONllSY0duR3hXMCt0QmE0RndhMGlUV3owd2R5dFE4cVpuMXdLUC9QMjNKZ0o1N1pwN3hOCmlLOHV6OENGRjZmTnkyNVJYeEV2cGRQdzEwcnJDM0Npem1mcjNaZHl0cGVFdk44U2V6STByMVNtVHBxSTM4UlEKZzVKdTFvV1NRcENEZjBPV1N5WUxxRno1NmU5dStPc0tyVXFzQkVsUkdKNWhvUGppVW9VN3I2N3lmSGl4TmdTcgpEM1I4aklSQzZITE5OTHE5UG8wQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZDclJxaGJRNnV1aWFlOVJJd3RsdGd0bHhaRzhNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBSU5QUmtZMEpKSk5jNjFlVUpSOQo2bm9LTFl0cUN6VUxqRDVOZ3BmSy9GK0NvNk45Y0k5c0c1V1FVQ3ZMUVc5MUlFRlhFencvSEswUFBJTy8zVFpICjVQS05TUjR5d2hwSmtyeFRveDEvWWRqK2RWNzNGUnFKTFVuQkw1T3U4SWlKR2RNR0VKc040dnd5amk5TGt3WGMKcC9aUUVieWhLdmRvRWdOaDlhUzMrQzRJSVFnNmVqZTgvYVh6NTVaL2RoN2NZQUhCZWFQYmVwWU1kNklwc3VhTwo5Smx3TmJaSWczNHIzL3hQYjhCNUJOSkp2MXI3eE1YblFlaXc1MFNWaGdpR0JXMFdOdFo4NDVGREY2NHFzVFBsCjhLSjZOQkdjRUVuTHpDSXNhVUwxUHk4bk90K3NWWFNlUlhXV2VlWm84R0krWGpXQjZWL3FscnllSmp6Yy9hUU4KYWdBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
- 
Broker—>brokerK8sApiServerToken:访问 Broker 集群 API-Server 的 Token,可以通过以下方式获取:# 在安装 submariner-k8s-broker 的集群上 [root@broker ~]# kubectl -n submariner-k8s-broker get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='submariner-k8s-broker-client')].data.token}" | base64 --decode eyJhbGciOiJSUzI1NiIsImtpZCI6Ik1kUWpXalIwUVV0RmtTcjJXdElvMW1WWHdZbU5Md2pRN0tFeVZSbUpINTgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJzdWJtYXJpbmVyLWs4cy1icm9rZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoic3VibWFyaW5lci1rOHMtYnJva2VyLWNsaWVudC10b2tlbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJzdWJtYXJpbmVyLWs4cy1icm9rZXItY2xpZW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYzM0MzQ0MTItOTEyNi00NmFjLTk5ODUtZDgwYWI3MDAxOTdkIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OnN1Ym1hcmluZXItazhzLWJyb2tlcjpzdWJtYXJpbmVyLWs4cy1icm9rZXItY2xpZW50In0.quC7a3hTctbgaRKHmzAvlP16EspwtTzWzirgj0o2d9XYfVe6bPX29Wg4XHh3ZzetaMYmvj_toukQJcQ6bO1CG7xv4mOFFkLF2ECrQNPGKYa5A2LHgQCFiWteWjU7wcisW3lugMTC6a5OrbK4optvVjseLwqI-BClm8nsgjGocBTrv1qqDp-4aiPkLtgcZRV2bsgE3yLsyc7Mhuncs7gDmI2NuBXoYRGfXtAjd6XIbnXd5Tp5sAV_k92xruNqKDpzQZI32K6I7It1WNQvtGOTYHa9sks0gxgUmQu8Z9Pikke5LCFOMNcBbjwlCCxzg6jKWJH87ReMtenRqcfG2jNeTQ注意需要执行 decode 
- 
Broker—>brokerK8sRemoteNamespace: submariner-k8s-broker 组件的命名空间,默认为 submariner-k8s-broker(参考步骤 4)。
- Broker—>- enableGloablnet:是否启用 Globalnet 功能。如果子集群间子网重叠,可以启用。
 
- 
- 
配置 submariner-operator: 以上配置说明: - 
IPsec Configuration—>ceIPSecPSK:建立 IPsec 隧道时所需要的预共享密钥。如果对安全性有较高要求,可以使用下面的方式获取:
- 
Submariner—>clusterId:用于标识该子集群,填写规范需要满足 DNS-1123 Label。
- 
Submariner—>clusterCidr:子集群 Pod 的 CIDR。 
- 
Submariner—>serviceCidr:子集群 Service 的 CIDR。
- 
Submariner—>globalCidr:开启 globalnet 功能。注意: 如果不使用 globalnet 功能, 请不要配置该字段。 
- 
Image Configuration—>cableDriver:隧道模式,支持libreswan(默认)、wireguard、vxlan。
- Image Configuration—>- natEnabled:是否打开网关节点之间的 NAT 功能。如果不同子集群的网关节点需要跨公网才能通讯, 则开启。
 
- 
- 
在子集群 master01 安装完成:  
- 
安装完成后,需要手动设置子集群 master01 其中某个节点为网关节点,需要添加标签 "submariner.io/gateway: true":  
- 
查看组件是否正常 running: root@controller-node-1:~# kubectl get po -n submariner-operator NAME READY STATUS RESTARTS AGE helm-operation-upgrade-submariner-operator-q79sp-9bkzl 0/1 Completed 0 31h submariner-gateway-jpclp 1/1 Running 18 (30m ago) 31h submariner-lighthouse-agent-589676874b-dn75z 1/1 Running 0 31h submariner-lighthouse-coredns-5d675b4897-tm752 1/1 Running 0 32h submariner-lighthouse-coredns-5d675b4897-wxr8z 1/1 Running 0 32h submariner-metrics-proxy-2ptmn 2/2 Running 0 31h submariner-operator-75ccdf484-6862g 1/1 Running 0 32h submariner-routeagent-kh4hp 1/1 Running 0 31h
- 
子集群 master01 join 完成,按照同样方式在另一个子集群安装 submariner。 
注意事项¶
- 安装完之后需要至少给一个节点打上标签:"submariner.io/gateway: true"。只有该标签存在, Gateway 组件才会被安装。
- 如果集群 CNI 为 Calico, 需要做一些额外的操作,来解决与 Calico 的兼容性问题,请参考使用说明。