在 AWS 安装 TSB

查看本文大纲

本文档描述了如何在 AWS 单一 VPC 中安装 TSB。

在开始之前,请确保你已经:

使用单一 VPC 安装 TSB

在这种情况下,你将需要在你的 AWS 帐户中运行 3 个 EKS 集群,以及运行 Elasticsearch 和 Postgres。

请按照相应的 AWS 指南进行更详细的设置:

首先,使用以下命令模板创建管理平面集群。 由于命令中没有明确定义 VPC,将为你创建一个新的 VPC。

$ eksctl create cluster \
  --name <NAME> \
  --version <VERSION> \
  --region <REGION> \
  --nodegroup-name <POOLNAME> \
  --nodes <NUM> \
  --node-type <TYPE> \
  --managed

一旦管理平面集群、节点和 VPC 准备就绪,请记录下子 VPC 名称,并继续进行 Tier 1 和控制平面集群的设置。

对于 Tier 1 和控制平面集群,你需要在前面的命令模板之上指定 VPC 网络信息。使用以下命令模板创建两个集群,一个用于 Tier 1,另一个用于控制平面。

$ eksctl create cluster \
  --name <NAME> \
  --version <VERSION>\
  --region <REGION> \
  --nodegroup-name <POOLNAME> \
  --nodes <NUM> \
  --node-type <TYPE> \
  --managed \
  --vpc-private-subnets <VPCNAMES> \
  --vpc-public-subnets <VPCNAMES>

一旦 EKS 集群准备就绪,请确保根据提供的链接设置 OpenSearch 和 PostgreSQL。

部署管理平面

指向为管理平面安装创建的集群,并按照 管理平面安装 中的说明操作。

但是,请确保在创建管理平面密钥时指定 Elasticsearch 和 PostgreSQL 的额外信息:

$ tctl install manifest management-plane-secrets  \
  --elastic-username <USER> \
  --elastic-password <PASS> \
  --postgres-username <USER> \
  --postgres-password <PASS> \
  ... other options ...

此外,ManagementPlane 自定义资源应该指向正确的 PostgreSQL 和 OpenSearch 端点:

# <snip>
 dataStore:
   postgres:
     address: <postgres-endpoint>
     name: <database-name>
 telemetryStore:
   elastic:
     host: <elastic-endpoint>
     port: <elastic-port>
     version: <elastic-version>
# <snip>

安装管理平面后,你应该能够使用以下命令获取外部主机名(确保你的 Kubernetes 上下文指向适当的集群):

$ kubectl get svc -n tsb

从上述命令的输出中,你应该能够找到一个主机名,类似于 ab940458d752c4e0c80830e9eb89a99d-1487971349.<Region>.elb.amazonaws.com。这是在配置 Tier 1 和控制平面配置 YAML 文件时要使用的端点。

部署 Tier 1 和控制平面(Tier2)集群

对于 Tier 1 和 CP 集群,请按照以下说明进行操作:

查看以下链接以获取有关 Tier1 网关控制平面 的更多信息。

设置这些集群后,在 Tier 1 和 Tier 2 中的 Edge XCP 中添加以下注释以启用 多集群路由 并应用这些设置。

# <snip>
components:
  xcp:
    kubeSpec:
      overlays:
      - apiVersion: install.xcp.tetrate.io/v1alpha1
        kind: EdgeXcp
        name: edge-xcp
        patches:
        - path: spec.components.edgeServer.kubeSpec.overlays
          value:
          - apiVersion: v1
            kind: Service
            name: xcp-edge
            patches:
            - path: spec.type
              value: NodePort
            - path: metadata.annotations
              value:
                traffic.istio.io/nodeSelector: '{"beta.kubernetes.io/arch":"amd64"}'

集群设置完成后,你可以按照 部署 bookinfo 应用程序的说明 继续进行演示工作负载。

使用多个 VPC 安装 TSB

对于此安装,你应该已经在

单个 VPC 中运行了 TSB。

image

此情景中的基础架构与使用单个 VPC 的情况类似,但托管控制平面(Tier2)的集群位于与管理平面和 Tier 1 网关的集群不同的 VPC 中。这些 VPC 需要配置以能够相互通信。请阅读 AWS 中有关 VPC 对等连接 的指南以及 CLI 参考中的相关部分,以获取更多详细信息。

首先创建一个集群和控制平面的新 VPC。你可以使用与为单个 VPC 案例创建第一个 EKS 集群时相同的命令模板。

$ eksctl create cluster \
  --name <NAME> \
  --version <VERSION> \
  --region <REGION> \
  --nodegroup-name <POOLNAME> \
  --nodes <NUM \
  --node-type <TYPE> \
  --managed 

配置 VPC

你需要检索 VPC 信息以继续配置。使用以下命令获取必要信息:

$ aws ec2 --output text \
          --query 'Vpcs[*].{VpcId:VpcId,Name:Tags[?Key==`Name`].Value|[0],CidrBlock:CidrBlock}' describe-vpcs

找到将要参与的每个 VPC 的 ID,并使用 aws ec2 create-vpc-peering-connection 命令创建 VPC 对等连接,以允许这些 VPC 互相通信:

$ aws ec2 create-vpc-peering-connection \
          --vpc-id <VPC-ID1> \
          --peer-vpc-id <VPC-ID2>

请注意从上述命令的输出中获取 VpcPeeringConnectionId 字段的值。你将需要此值来接受对等连接请求。

使用此 ID,使用 aws ec2 accept-vpc-peering-connection 命令接受对等连接:

$ aws ec2 accept-vpc-peering-connection --vpc-peering-connection-id <PEERID>

当上述命令成功执行时,这些 VPC 应该能够相互通信。

配置控制平面集群

为了连接到控制平面集群,你需要更新你的 kubeconfig。使用适当的值运行以下命令:

$ aws eks --region <REGION> update-kubeconfig --name <NAME>

启动控制平面。一般的设置与 Onboarding Clusters 指南 中的相同。

你的控制平面的集群定义应如下所示。注意 spec 组件中的额外字段。

apiVersion: api.tsb.tetrate.io/v2
kind: Cluster
metadata:
  name: cp-remote
  organization: tetrate
spec:
  displayName: "Control Plane Remote"
  network: tier2

当你准备好 安装控制平面自定义资源 时,从指南中修改定义,并使用以下 YAML 作为指南设置适当的值:

apiVersion: install.tetrate.io/v1alpha1
kind: ControlPlane
metadata:
  name: controlplane
  namespace: istio-system
spec:
  hub: <repository>
dataStore:
  postgres:
    address: <postgres-endpoint>
    name: <database-name>
  telemetryStore:
    elastic:
      host: <elastic-endpoint>
      port: <elastic-port>
      version: <elastic-version>
  managementPlane:
    host: <management-plane-endpoint>
    port: 8443
    clusterName: <management-plane-cluster>
  components:
    internalCertProvider:
      certManager:
        managed: INTERNAL
    xcp:
      kubeSpec:
        overlays:
        - apiVersion: install.xcp.tetrate.io/v1alpha1
          kind: EdgeXcp
          name: edge-xcp
          patches:
          - path: spec.components.edgeServer.kubeSpec.overlays
            value:
            - apiVersion: v1
              kind: Service
              name: xcp-edge
              patches:
              - path: spec.type
                value: NodePort
              - path: metadata.annotations
                value:
                  traffic.istio.io/nodeSelector: '{"beta.kubernetes.io/arch":"amd64"}'

如果一切配置正确,你应该能够在新集群上部署工作负载。