跳转至

安装 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 的模式必须为 IPtablesIPvs 模式目前尚不支持
  • 集群内部需要允许 Vxlan 的流量,集群外部需要放通 udp/4500 端口

Submariner 现在处于比较早期的阶段, 出现 Bug 比较常见。

安装步骤

Note

submariner-k8s-broker 可以部署在一个单独的集群,也可以部署在 Join 的子集群中。本文以 submariner-k8s-broker 部署在一个单独的集群为例,展示安装过程。

请确认您的集群已成功接入容器管理平台,然后执行以下步骤首先安装 submariner-k8s-broker:

  1. 在左侧导航栏点击 容器管理 —> 集群列表, 然后找到准备安装 submariner-k8s-broker 的集群名称。

  2. 在左侧导航栏中选择 Helm 应用 -> Helm 模板,找到并点击 submariner-k8s-broker

    helm

  3. 在版本选择中选择希望安装的版本,点击安装。

  4. 推荐安装到 submariner-k8s-broker 命名空间下:

    broker-ns

  5. 下图所示配置无需更改,保持默认参数即可:

    config

  6. 在 Broker 集群成功安装 submariner-k8s-broker

    broker

  7. 切换到其中子集群:master01,安装 submariner-operator

    operator

  8. 在版本选择中选择希望安装的版本,点击安装。

  9. 推荐安装到 submariner-operator 命名空间下,开启就绪等待:

    operator-ns

  10. 配置 submariner-operator 连接 Broker 集群的配置:

    operator-broker

    上面的参数说明:

    • Broker —> brokerK8sApiServer:Broker 集群 API-Server 的地址,可以通过以下方式获取:

      # 在安装 submariner-k8s-broker 的集群上
      [root@broker ~]# kubectl -n default get endpoints kubernetes  -o jsonpath="{.subsets[0].addresses[0].ip}:{.subsets[0].ports[?(@.name=='https')].port}"
      10.6.172.22:6443
      
    • 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 功能。如果子集群间子网重叠,可以启用。
  11. 配置 submariner-operator

    operator-install1

    以上配置说明:

    • IPsec Configuration —> ceIPSecPSK:建立 IPsec 隧道时所需要的预共享密钥。如果对安全性有较高要求,可以使用下面的方式获取:

      [root@broker ~]# LC_CTYPE=C tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w 64 | head -n 1
      ZSMhkWz6EfO7zacMLCeYoKruYIm6iq1roNQKS8rKW8cQGJiYwDaYQNrzbbdP2azl
      
    • Submariner —> clusterId:用于标识该子集群,填写规范需要满足 DNS-1123 Label。

    • Submariner —> clusterCidr:子集群 Pod 的 CIDR。

      operator-install2

    • Submariner —> serviceCidr:子集群 Service 的 CIDR。

    • Submariner —> globalCidr:开启 globalnet 功能。

      注意: 如果不使用 globalnet 功能, 请不要配置该字段。

    • Image Configuration —> cableDriver:隧道模式,支持 libreswan(默认)、wireguardvxlan

    • Image Configuration —> natEnabled:是否打开网关节点之间的 NAT 功能。如果不同子集群的网关节点需要跨公网才能通讯, 则开启。
  12. 在子集群 master01 安装完成:

    opearator-install-3

  13. 安装完成后,需要手动设置子集群 master01 其中某个节点为网关节点,需要添加标签 "submariner.io/gateway: true":

    gateway

  14. 查看组件是否正常 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
    
  15. 子集群 master01 join 完成,按照同样方式在另一个子集群安装 submariner。

注意事项

  • 安装完之后需要至少给一个节点打上标签:"submariner.io/gateway: true"。只有该标签存在, Gateway 组件才会被安装。
  • 如果集群 CNI 为 Calico, 需要做一些额外的操作,来解决与 Calico 的兼容性问题,请参考使用说明

评论