使用 terraform 将公共 GKE 更改为私有 GKE 集群

2024-04-18

如何将现有的GKE集群更改为GKE私有集群?我是否能够根据防火墙规则从互联网连接到 Kubectl API,还是应该拥有堡垒主机?我不想实施Cloud Nat or nat gateway。我有一个鱿鱼代理虚拟机,可以处理 Pod 的互联网访问。我只需要能够连接到 Kubectl 来应用或修改任何内容。

我不确定如何修改我编写的现有模块以使节点成为私有节点,并且我不确定如果我尝试应用与私有 gke 集群相关的新更改,集群是否会被删除。

resource "google_container_cluster" "primary" {
  name     = "prod"
  network  = "prod"
  subnetwork = "private-subnet-a"
  location               = "us-west1-a"
  remove_default_node_pool = true
  initial_node_count = 1

  depends_on = [var.depends_on_vpc]
}

resource "google_container_node_pool" "primary_nodes" {
  depends_on = [var.depends_on_vpc]

  name       = "prod-node-pool"
  location   = "us-west1-a"
  cluster    = google_container_cluster.primary.name
  node_count = 2

  node_config {
    preemptible  = false
    machine_type = "n1-standard-2"

    metadata = {
      disable-legacy-endpoints = "true"
    }

    oauth_scopes = [
      "https://www.googleapis.com/auth/logging.write",
      "https://www.googleapis.com/auth/monitoring",
      "https://www.googleapis.com/auth/devstorage.read_only",
      "https://www.googleapis.com/auth/compute",
    ]
  }
}

回答问题的部分:

如何将现有的GKE集群更改为GKE私有集群?

GKE环境:Private cluster是不可变的。该设置只能在GKE集群配置。

要将集群创建为私有集群,您可以:

  • 创建一个新的GKE私有集群。
  • Duplicate existing cluster and set it to private:
    • 此设置可用于GCP Cloud Console -> Kubernetes Engine -> CLUSTER-NAME -> Duplicate
    • 此设置将克隆之前集群的基础架构配置,但不会克隆工作负载(Pods, Deployments, etc.)

我是否能够根据防火墙规则从互联网连接到 Kubectl API,还是应该拥有堡垒主机?

是的,您可以,但这在很大程度上取决于您在测试过程中选择的配置GKE集群创建过程。

至于连接到您的能力GKE私有集群,有一个专门的文档:

  • Cloud.google.com:Kubernetes Engine:文档:如何:私有集群 https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters

至于如何使用 Terraform 创建私有集群,有一个专门的站点,其中包含特定于GKE。还有一些参数负责配置private簇:

  • Registry.terraform.io:提供商:Hashicorp:Google:最新:文档:资源:容器集群 https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/container_cluster

至于创建私有的基本示例GKE与 Terraform 集群:

  • main.tf
provider "google" {
  project = "INSERT_PROJECT_HERE" 
  region  = "europe-west3"
  zone    = "europe-west3-c"
}
  • gke.tf
resource "google_container_cluster" "primary-cluster" {
  name               = "gke-private"
  location           = "europe-west3-c"
  initial_node_count = 1

  private_cluster_config {
    enable_private_nodes = "true"
    enable_private_endpoint = "false" # this option will make your cluster available through public endpoint 
    master_ipv4_cidr_block = "172.16.0.0/28"
  }

  ip_allocation_policy {
    cluster_secondary_range_name = "" 
    services_secondary_range_name = ""
  }

  
  node_config {
    machine_type = "e2-medium"
  }
}

附注!

我创建了一个公共GKE集群,修改了.tf负责创建它以支持私有集群。运行后:$ terraform plan Terraform 回复了将重新创建集群的信息.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 terraform 将公共 GKE 更改为私有 GKE 集群 的相关文章

随机推荐

  • 具有多处理功能的超时装饰器类会出现酸洗错误

    所以在 Windows 上signal和thread一般来说 这种方法是坏主意 不适用于函数超时 我制作了以下超时代码 它会抛出timeout exception from multiprocessing当代码花费很长时间时 这正是我想要的
  • php 和 html 文件扩展名有什么区别?

    我有一个 php文件包含以下代码 当我将文件的扩展名更改为 html那么它也以同样的方式表现 任何人都可以解释以下内容 为什么文件的行为方式与两个文件的行为方式相同 扩展 两者有什么区别 php and html文件扩展名 php file
  • 检测鼠标悬停在用户控件和所有子控件上 - C# WinForms

    我设计了一个用户控件 里面有几个控件 我将用户控件拖放到表单上 然后为其设置鼠标悬停事件以在某处显示评论 但有一个问题 用户应该将鼠标悬停在 UserControl 容器上才能看到该注释 如果他将鼠标悬停在 UserControl 内的其中
  • 如何调用模板基类中的模板成员函数?

    当在基类中调用非模板化成员函数时 可以使用以下命令导入其名称using到派生类中然后使用它 这对于基类中的模板成员函数也可能吗 只是与using它不起作用 使用 g snapshot 20110219 std c 0x template
  • 是否有必要创建与现有 ASP.NET 2.0 ASPState DB 不同的 ASP.NET 4.0 SQL 会话状态数据库?

    Is the ASP NET 4 0SQL 会话状态机制向后兼容 ASP NET 2 0 会话状态架构 或者我们应该 必须为 ASP NET 4 0 应用程序创建一个单独且不同的会话状态数据库 无论如何我倾向于后者 但是2 0数据库seem
  • 匹配/分组重复行(索引)

    如何有效地匹配 分组重复行的索引 假设我有这个数据集 set seed 14 dat lt data frame mtcars sample 1 5 14 TRUE sample int 14 rownames dat lt NULL da
  • BlueImp 插件 jQuery 文件上传:如何使用 fileInput 选项以便 fileupload() 可以绑定新的动态添加的输入?

    我使用 BlueImp 插件上传文件 当用户单击 添加文件 时 会动态添加新的文件输入 然后 当用户上传文件时 它会通过 AJAX 存储在我的 Web 文件夹中 我的第一个想法是在生成的 id 上调用 fileupload 方法 例如 fi
  • 无法在回收者视图中从一项活动转到另一项活动

    大家好 我正在尝试使用回收器视图的适配器类中的意图从一个活动移动到另一个活动 但这样做时出现 son me 错误 以下是错误 1 PakistaniActivity 不是一个封闭类 2 无法解析StatrActivity 方法 这是我的代码
  • “天真的”svn 从分支合并到主干?

    我正在将 TortoiseSVN 用于我的 C 项目 并尝试将 分支重新集成 回主干 我的情况很简单 因此对于分支中更改的每个文件 我希望它完全覆盖主干中的匹配文件 不幸的是 TortoiseSVN 比我聪明 因此它合并了每对文件 导致了一
  • 与“iostream.h”

    在 C 中包含头文件时 有什么区别 包括 h部分与不包括 h包裹时的部分 lt gt signs include 与 include 将标头名称用双引号括起来还是用 符号括起来 include 与 include iostream h 简而
  • 在查询索引/唯一字段时使用 MySQL“LIMIT 1”有什么意义吗?

    例如 我正在查询一个我知道将是唯一的并且已建立索引 例如主键 的字段 因此我知道这个查询只会返回 1 行 即使没有 LIMIT 1 SELECT FROM tablename WHERE tablename id 123 LIMIT 1 或
  • 如何使用 SSH 密钥和 Pageant 通过 Paramiko 连接到 SFTP

    我正在尝试使用受密码保护的 SSH 密钥通过 Paramiko 连接到 SFTP 我已将密钥加载到 Pageant 中 据我所知 Paramiko 支持该密钥 但我无法用它来解密我的私钥 我找到了这个例子here https stackov
  • 通过检索 JavaScript 值自动选择复选框

    自 1 周以来 我在一点上遇到了一些困难 我有 2 个数组 我想通过检索其中一个数组内的值来自动选择复选框 首先 我有一个循环 它根据第一个数组选项 创建一些复选框 每次我选中一个复选框时 文本字段都会用分隔符更新 我自己保存这个文本字段
  • MVVMCross 以编程方式更改启动 ViewModel

    可移植类库定义了启动视图模型 这种情况听起来不错 但我正在考虑这一点 您编写了一个 iOS 通用应用程序或 Android 需要更改其开始屏幕 视图模型 如果应用程序是手机 则默认视图模型是登录 但如果应用程序是平板电脑 则需要不同的视图模
  • 从 PHP 5.5 升级到 5.6 后,cURL 文件上传不再起作用

    从 PHP 5 5 升级到 5 6 后 我的 cURL 上传失败 aPost array file gt localFile default file gt html version html expiration gt 2 31 24 6
  • Spark SQL 未正确转换时区[重复]

    这个问题在这里已经有答案了 使用 Scala 2 10 4 和 Spark 1 5 1 和 Spark 1 6 sqlContext sql select id to date from utc timestamp from unixtim
  • 如何在Android中的seekbar下方显示分隔符值?

    我添加了一个seekbar我的一项活动 它的最大值是 5 现在 我想在搜索栏下方显示分隔符值 增量为 1 如 0 1 2 3 4 和 5 我怎样才能做到这一点 有没有什么系统方法可以实现这一目标 但我无法亲自动手 欢迎任何意见 注意 我想以
  • PHP Ajax上传进度条

  • 什么是消息边界?

    什么是 消息边界 在以下情况下 TCP 和 UDP 之间的区别之一是 UDP 保留消息 边界 我理解之间的区别TCP and UDP 但我不确定的定义 消息边界 由于 UDP 在每个单独的数据包中包含目的地和端口信息 因此是否可以为消息提供
  • 使用 terraform 将公共 GKE 更改为私有 GKE 集群

    如何将现有的GKE集群更改为GKE私有集群 我是否能够根据防火墙规则从互联网连接到 Kubectl API 还是应该拥有堡垒主机 我不想实施Cloud Nat or nat gateway 我有一个鱿鱼代理虚拟机 可以处理 Pod 的互联网