首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >GCP/GKE添加网络标记

GCP/GKE添加网络标记
EN

Stack Overflow用户
提问于 2020-05-07 14:46:22
回答 1查看 3.9K关注 0票数 1

作为GCP中的代码情况,我试图找到一种方法来改进我们的基础设施。我希望我能

  1. 基于目标标记创建防火墙规则白名单
  2. 使目标标记成为部署yaml配置的一部分。

我希望通过在部署中添加标记,我可以让它自动将这些标记应用到它创建的任何计算资源或负载均衡器中。这样,就可以通过terraform创建一个防火墙规则,该规则适用于这些标记。

我是走错路了还是有办法这么做?这不仅是为了自动化防火墙规则管理,也是为了清理可能干扰操作的不必要规则。

EN

回答 1

Stack Overflow用户

发布于 2020-06-15 05:39:45

GCP正在积极使用network tags标记受防火墙规则影响的资源(允许,阻塞)。这些标记与Compute Engine实例、托管组和其他链接。

Kubernetes使用labels标记与服务一起使用的资源(公开应用程序)。

network tags labels 之上的是独立的资源,不能在 GCP/GKE environment.中一起使用。

请查阅有关这些资源的正式文件:

当您在LoadBalancer中创建GKE类型的服务时,您会自动为它创建一个转发规则。以后可以修改/编辑此规则。它可以被编辑成只允许来自某些IP地址的请求的状态,比如家庭/办公室等。

它可以用GCP Dashboard -> VPC Network -> Firewall手动修改。

我在Terraform中找到了一个解决方案,它允许修改由创建的现有转发规则。

考虑到以上所述,我为带有Terraform和GKELoadBalancer创建了一个LoadBalancer示例。步骤:

  • 产生工作量。
  • 将工作负载公开给外部使用。
  • 编辑现有的转发规则以阻止来自某些CIDR/s的通信量。

假设:

  • Terraform已安装并可访问GCP
  • GKE集群已经准备好了
  • kubectl设置为连接到上面的群集。

有关上述步骤的参考:Learn.hashicorp.com: Terraform:供应GKE集群

至于Ingress。管理它将在很大程度上取决于所使用的解决方案如下:

  • ingress-nginx
  • ingress-gce

产生工作量

下面的示例nginx deployment将用于响应请求:

代码语言:javascript
运行
复制
resource "kubernetes_deployment" "nginx" {
  metadata {
    name = "scalable-nginx-example"
    labels = {
      App = "ScalableNginxExample"
    }
  }

  spec {
    replicas = 2
    selector {
      match_labels = {
        App = "ScalableNginxExample"
      }
    }
    template {
      metadata {
        labels = {
          App = "ScalableNginxExample"
        }
      }
      spec {
        container {
          image = "nginx:1.7.8"
          name  = "example"

          port {
            container_port = 80
          }

          resources {
            limits {
              cpu    = "0.5"
              memory = "512Mi"
            }
            requests {
              cpu    = "50m"
              memory = "50Mi"
            }
          }
        }
      }
    }
  }
}

将工作负载公开给外部使用

下面的定义将为nginx部署创建LoadBalancer类型的服务:

代码语言:javascript
运行
复制
resource "kubernetes_service" "nginx" {
  metadata {
    name = "nginx-example"
  }
  spec {
    selector = {
      App = kubernetes_deployment.nginx.spec.0.template.0.metadata[0].labels.App
    }
    port {
      port        = 80
      target_port = 80
    }

    type = "LoadBalancer"
  }
}

output "lb_ip" {

value = kubernetes_service.nginx.load_balancer_ingress[0].ip

}

GKE将自动创建转发规则,并为负载均衡器分配IP地址。Terraform将不知道此转发规则,因此需要导入此转发规则才能修改它。

请对lb_ip部分进行详细的检查。在成功运行Terraform之后,该部分将输出LoadBalancer的IP。此值可用于标识与服务关联的转发规则。

编辑现有转发规则以阻止来自某些CIDR/s的通信量

如上所述:

Terraform将不知道此转发规则,因此需要导入此转发规则才能修改它。

这里的问题是,需要一些自我脚本来完全自动化这个解决方案.

转发规则名称是必要的,以有能力修改它。

GCP基础结构中提取转发规则名称的方法之一是:

  • 从:LoadBalancer IP获取
    • $ kubectl get svc nginx-example

  • 从:forwarding rule获取名称
    • $ gcloud compute firewall-rules list --format=json

免责声明:上面的命令将输出所有防火墙规则,包括目标标记、优先级和json格式的描述等细节。LoadBalancer IP将位于防火墙规则的LoadBalancer IP部分。

  • 提取的转发规则名称应该类似于:
    • k8s-fw-aefb2110aad9e11ea971d42010a9c00a

  • 使用上面的名称在Terraform中创建资源

转发规则的

代码语言:javascript
运行
复制
- Create a desired definition of `forwarding rule` in file. Please take a look on below **example rule** and change according to your use case. This resource can be used as a template for another new resources. Please make sure that `target_tags` are the same as not modified version. 

示例定义:

代码语言:javascript
运行
复制
resource "google_compute_firewall" "YOUR-NAME-OF-FORWARDING" {
  project = "PROJECT-NAME"
  provider = google-beta
  name = "k8s-fw-aefb2110aad9e11ea971d42010a9c00a"
  network = "PROJECT-NETWORK"
  source_ranges = ["1.2.3.4/32"]
  priority = "1000"
  allow {
    protocol = "tcp"
    ports = ["80"]
    }
  target_tags = ["gke-PROJECT-NAME-gke-c6d3956c-node"] # 
  direction = "INGRESS"
  }
  • 通过以下方式导入资源:
代码语言:javascript
运行
复制
$ terraform import google_compute_firewall.YOUR-NAME-OF-FORWARDING projects/PROJECT-NAME/global/firewalls/k8s-fw-aefb2110aad9e11ea971d42010a9c00a`

在发布$ terraform apply时,您应该能够看到forwarding rule中所需的更改,如下所示(部分):

代码语言:javascript
运行
复制
 ~ source_ranges           = [
     - "0.0.0.0/0",
     + "1.2.3.4/32",
   ]

应用防火墙规则转发流量后,应该修改!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61660732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档