跳至内容

kOps 中的堡垒机

堡垒机提供了一个面向外部的入口点,连接到包含私有网络实例的网络。此主机可以提供一个单点防御或审计,并且可以启动和停止以启用或禁用来自 Internet 的入站 SSH 通信,有些人将堡垒机称为“跳跃服务器”。

AWS

启用/禁用堡垒机

要启用堡垒机实例组,用户需要在创建集群时设置 --bastion 标志

kops create cluster --topology private --networking $provider --bastion $NAME

要向现有集群添加堡垒机实例组,请使用 --role Bastion 标志创建一个新的实例组,并指定一个或多个子网(例如,utility-us-east-2a,utility-us-east-2b)。

kops create instancegroup bastions --role Bastion --subnet $SUBNET

配置堡垒机实例组

您可以编辑堡垒机实例组以进行更改。默认情况下,堡垒机实例组的名称将为 bastions,您可以使用 --name 指定集群的名称,如

kops edit ig bastions --name $KOPS_NAME

您现在应该能够编辑和配置您的堡垒机实例组。

apiVersion: kops.k8s.io/v1alpha2
kind: InstanceGroup
metadata:
  name: bastions
spec:
  associatePublicIp: true
  image: ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20220404
  machineType: t2.micro
  maxSize: 1
  minSize: 1
  role: Bastion
  subnets:
  - utility-us-east-2a

注意:如果您要关闭堡垒机服务器,必须将实例组的 maxSizeminSize 字段设置为 0

如果您根本不想创建堡垒机实例组,只需从创建命令中删除 --bastion 标志。实例组永远不会创建。

使用公共 CNAME 访问您的堡垒机

默认情况下,堡垒机实例组将创建一个公共 CNAME 别名,它将指向堡垒机 ELB。

默认的堡垒机名称为 bastion.$NAME,例如

bastion.mycluster.example.com

除非用户使用 --dns-zone,它将固有地使用 bastion-$ZONE 语法。

您可以通过编辑主集群配置 kops edit cluster $NAME 并修改以下块来定义自定义堡垒机 CNAME

spec:
  topology:
    bastion:
      bastionPublicName: bastion.mycluster.example.com

使用内部(仅 VPC)负载均衡器

引入
kOps 1.23

在配置负载均衡器时,您还可以选择使用公共负载均衡器或内部(仅 VPC)负载均衡器。type 字段应为 PublicInternal(如果省略,则默认为 Public)。

spec:
  topology:
    bastion:
      loadBalancer:
        type: "Internal"

向 ELB 添加额外的安全组

引入
kOps 1.18

如果您要向堡垒机 ELB 添加安全组

spec:
  topology:
    bastion:
      bastionPublicName: bastion.mycluster.example.com
      loadBalancer:
        additionalSecurityGroups:
        - "sg-***"

使用八卦时的访问

当使用 八卦模式 时,没有 DNS 区域可以为堡垒机配置 CNAME。由于堡垒机位于负载均衡器的前面,因此您可以使用负载均衡器的端点来访问您的堡垒机。

在 AWS 上,查找此 DNS 名称的简便方法是使用 kops toolbox

kops toolbox dump -ojson | grep 'bastion.*elb.amazonaws.com'

更改您的 ELB 空闲超时

堡垒机通过 AWS ELB 访问。ELB 是连接到私有网络并连接用户到堡垒机所在 ASG 所必需的。默认情况下,kOps 会将堡垒机 ELB 空闲超时设置为 5 分钟。这对于您计划保持打开的堡垒机的 SSH 连接很重要。

您可以通过编辑主集群配置 kops edit cluster $NAME 并修改以下块来增加 ELB 空闲超时

spec:
  topology:
    bastion:
      idleTimeoutSeconds: 1200

其中最大值为 AWS 允许的 3600 秒(60 分钟)。有关更多信息,请参阅 配置空闲超时

使用堡垒机

设置集群后,如果需要 SSH 到堡垒机,可以使用以下步骤访问集群资源

# Verify you have an SSH agent running. This should match whatever you built your cluster with.
ssh-add -l
# If you need to add the key to your agent:
ssh-add path/to/private/key

# Now you can SSH into the bastion. Substitute the administrative username of the instance's OS for <username> (`ubuntu` for  Ubuntu,  `admin` for Debian, etc.) and the bastion domain for <bastion-domain>. If the bastion doesn't have a public CNAME alias, use the domain of the assigned load balancer as the bastion domain.
ssh -A <username>@<bastion-domain>

# then you can use the fowarded authentication to SSH into control-plane or worker nodes in the cluster.
ssh <username>@<node-address>

现在您可以成功地使用转发 SSH 代理 SSH 到堡垒机。您可以使用其本地 IP 地址 SSH 到您的任何集群资源。您可以从云控制台获取其本地 IP 地址。