IBM Cloud Docs
为什么在我添加或删除工作程序节点之后,strongSwan VPN 连接会失败?

为什么在我添加或删除工作程序节点之后,strongSwan VPN 连接会失败?

经典基础结构

先前已使用 strongSwan IPSec VPN 服务建立了有效的 VPN 连接。 但是,在集群上添加或删除工作程序节点后,遇到了下列一种或多种症状:

  • 您的 VPN 状态不是 "ESTABLISHED
  • 无法从内部网络访问新的工作站节点
  • 您无法从在新工作节点上运行的 pod 访问远程网络

如果已将工作程序节点添加到工作程序池:

  • 工作节点是在一个新的专用子网中配置的,而您现有的“localSubnetNAT 或”local.subnet 设置没有通过 VPN 连接暴露该子网。
  • VPN 路由无法添加到 Worker 节点,因为 Worker 的污点或标签没有包含在现有的“tolerations 或”nodeSelector 设置中。
  • VPN pod 在新的工作节点上运行,但该工作节点的公共 IP 地址不允许通过内部防火墙。

如果删除了工作程序节点:

  • 由于现有“tolerations 或”nodeSelector 设置中对某些污点或标签的限制,该工作节点是 VPN pod 运行的唯一节点。

更新Helm图表值,以反映工作节点的变化。

  1. 删除现有的 Helm chart。

    helm uninstall <release_name> -n <project>
    
  2. 打开 strongSwan VPN 服务的配置文件。

    helm show values iks-charts/strongswan > config.yaml
    
  3. 检查以下设置并根据需要进行更改,以反映出已删除或已添加的工作程序节点。

    如果添加了工作程序节点: localSubnetNAT : 添加的工作程序可能部署在新的专用子网上,该子网不同于其他工作程序节点所在的其他现有子网。 如果是使用子网 NAT 来重新映射集群的专用本地 IP 地址,并且在新子网上添加了工作程序,请将新的子网 CIDR 添加到此设置。

    nodeSelector
    如果先前将 VPN pod 部署仅限于具有特定标签的工作程序,请确保添加的工作程序节点也具有该标签。
    tolerations
    如果添加的工作程序节点已有污点,请更改此设置以允许 VPN pod 在具有任何污点或特定污点的所有有污点的工作程序上运行。
    local.subnet
    添加的工作程序可能部署在新的专用子网上,该子网不同于其他工作程序所在的现有子网。 如果应用程序是由专用网络上的 NodePort 或 LoadBalancer 服务公开的,并且应用程序位于添加的工作程序上,请将新的子网 CIDR 添加到此设置。 如果为 "local.subnet 添加了值,请检查内部部署子网的 VPN 设置是否也必须更新。

    如果删除了工作程序节点:

    localSubnetNAT
    如果是使用子网 NAT 来重新映射特定专用本地 IP 地址,请从此设置中除去来自旧工作程序的任何 IP 地址。 如果是使用子网 NAT 来重新映射整个子网,并且某个子网上没有任何工作程序存在,请从此设置中除去该子网 CIDR。 nodeSelector: 如果先前将 VPN pod 部署仅限于单个工作程序,并且删除了该工作程序,请将此设置更改为允许 VPN pod 在其他工作程序上运行。
    tolerations
    如果删除的工作程序没有污点,而唯一保留的工作程序有污点,请将此设置更改为允许 VPN pod 在具有任何污点或特定污点的工作程序上运行。
  4. 使用更新的值安装新 Helm chart。

    helm install <release_name> iks-charts/strongswan -f config.yaml
    
  5. 检查 chart 部署状态。 当 chart 就绪时,输出顶部附近的 STATUS 字段的值为 DEPLOYED

    helm status <release_name>
    
  6. 有时,你可能需要更改内部设置和防火墙设置,以匹配你对 VPN 配置文件所做的更改。

  7. 启动 VPN。

    • 如果 VPN 连接是由集群启动的(ipsec.auto 设置为 start),请先在内部部署网关上启动 VPN,然后在集群上启动 VPN。
    • 如果 VPN 连接是由内部部署网关启动的(ipsec.auto 设置为 auto),请先在集群上启动 VPN,然后在内部部署网关上启动 VPN。
  8. 设置 STRONGSWAN_POD 环境变量。

    export STRONGSWAN_POD=$(oc get pod -l app=strongswan,release=<release_name> -o jsonpath='{ .items[0].metadata.name }')
    
  9. 检查 VPN 的状态。

    oc exec  $STRONGSWAN_POD -- ipsec status