为什么在我添加或删除工作程序节点之后,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图表值,以反映工作节点的变化。
-
删除现有的 Helm chart。
helm uninstall <release_name> -n <project>
-
打开 strongSwan VPN 服务的配置文件。
helm show values iks-charts/strongswan > config.yaml
-
检查以下设置并根据需要进行更改,以反映出已删除或已添加的工作程序节点。
如果添加了工作程序节点:
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 在具有任何污点或特定污点的工作程序上运行。
-
使用更新的值安装新 Helm chart。
helm install <release_name> iks-charts/strongswan -f config.yaml
-
检查 chart 部署状态。 当 chart 就绪时,输出顶部附近的 STATUS 字段的值为
DEPLOYED
。helm status <release_name>
-
有时,你可能需要更改内部设置和防火墙设置,以匹配你对 VPN 配置文件所做的更改。
-
启动 VPN。
- 如果 VPN 连接是由集群启动的(
ipsec.auto
设置为start
),请先在内部部署网关上启动 VPN,然后在集群上启动 VPN。 - 如果 VPN 连接是由内部部署网关启动的(
ipsec.auto
设置为auto
),请先在集群上启动 VPN,然后在内部部署网关上启动 VPN。
- 如果 VPN 连接是由集群启动的(
-
设置
STRONGSWAN_POD
环境变量。export STRONGSWAN_POD=$(oc get pod -l app=strongswan,release=<release_name> -o jsonpath='{ .items[0].metadata.name }')
-
检查 VPN 的状态。
oc exec $STRONGSWAN_POD -- ipsec status
- 如果 VPN 连接的阶段状态为
ESTABLISHED
,说明 VPN 连接成功。 无需进一步操作。 - 如果仍有连接问题,请参阅“为什么我无法使用strongSwan Helm图表建立 VPN 连接?”进一步排除 VPN 连接故障。
- 如果 VPN 连接的阶段状态为