Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yaml GCP/GKE添加网络标签_Yaml_Terraform_Google Kubernetes Engine_Kubectl_Infrastructure As Code - Fatal编程技术网

Yaml GCP/GKE添加网络标签

Yaml GCP/GKE添加网络标签,yaml,terraform,google-kubernetes-engine,kubectl,infrastructure-as-code,Yaml,Terraform,Google Kubernetes Engine,Kubectl,Infrastructure As Code,我正试图找到一种方法来改善我们的基础设施,就像GCP中的代码一样。我希望我能 基于由添加的目标标记创建防火墙规则白名单 使目标标记成为部署yaml配置的一部分 我的希望是,通过在部署中添加标记,我可以让它自动将这些标记应用于它创建的任何计算资源或负载平衡器。这样,terraform就可以创建一个防火墙规则,适用于这些标签 我是不是走错了路,还是有办法做到这一点?这不仅是关于自动防火墙规则管理,也是关于清理可能干扰操作的不必要规则。GCP正在积极使用网络标记来标记受防火墙规则影响的资源(允许、阻止

我正试图找到一种方法来改善我们的基础设施,就像GCP中的代码一样。我希望我能

  • 基于由添加的目标标记创建防火墙规则白名单
  • 使目标标记成为部署yaml配置的一部分
  • 我的希望是,通过在部署中添加标记,我可以让它自动将这些标记应用于它创建的任何计算资源或负载平衡器。这样,terraform就可以创建一个防火墙规则,适用于这些标签


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

    GCP正在积极使用
    网络标记来标记受防火墙规则影响的资源(允许、阻止)。这些标记与计算引擎实例、托管组和其他对象连接

    Kubernetes正在使用
    标签
    标记与服务一起使用的资源(公开您的应用程序)

    以上
    网络标签
    标签
    是独立的资源,它们不能在
    GCP/GKE
    环境中一起使用。

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


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

    可以通过
    GCP Dashboard->VPC Network->Firewall
    手动修改

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


    考虑到以上内容,我为带有Terraform和GKE的
    LoadBalancer
    创建了一个示例。步骤:

    • 产生工作负载
    • 将工作负载暴露给外部使用
    • 编辑现有转发规则以阻止来自某些CIDR/s的流量
    假设:

    • Terraform
      已安装并可访问
      GCP
    • GKE
      群集已设置
    • kubectl
      设置为连接到上述集群
    参考上述步骤:

    至于
    入口
    。管理it将在很大程度上取决于所使用的解决方案,如:

    • ingress nginx
    • ingress gce
    产生工作负载 以下示例nginx
    部署将用于响应请求:

    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
    的服务:

    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
    后,此部件将输出负载平衡器的IP。此值可用于标识与服务关联的转发规则

    编辑现有转发规则以阻止来自某些CIDR/s的流量 如上所述:

    Terraform将不知道此转发规则,需要导入此转发规则才能对其进行修改。

    这里的问题是需要一些自脚本来完全自动化此解决方案。

    转发规则名称是修改它所必需的

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

    • 从以下位置获取
      负载平衡器IP
      • $kubectl获取svc nginx示例
    • 从以下位置获取转发规则的名称:
      • $gcloud计算防火墙规则列表--format=json
    免责声明: 上述命令将以json格式输出所有防火墙规则,包括目标标记、优先级和描述等详细信息<代码>负载平衡器IP
    将位于防火墙规则的说明部分

    • 提取的转发规则名称应类似于:
      • k8s-fw-aefb2110aad9e11ea971d42010a9c00a
    • 使用上面的名称在
      Terraform
      中创建资源:

      • 在文件中创建所需的
        转发规则定义。请查看下面的示例规则,并根据您的用例进行更改。此资源可以用作其他新资源的模板。请确保
        target_标签
        与未修改版本相同

        转发规则的示例定义:

    • 使用以下命令导入资源:
    当发布
    $terraform apply
    时,您应该能够在
    转发规则中看到所需的更改,如下(部分):


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

    你能举一个这样的规则的例子吗?在这种情况下,我们是否只谈论GKE
    GKE
    cluster是一个托管解决方案,它会自动为您执行许多操作,如防火墙规则和负载平衡器配置。它会自动执行防火墙规则,但不允许您自定义我可以告诉您的规则。如果我想让它成为只允许特定CIDR范围的白名单规则,我不知道有什么方法可以做到这一点。我想阻止第3层到入口或负载均衡器的流量,只允许我们的办公室或VPN范围访问。
    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"
      }
    
    $ terraform import google_compute_firewall.YOUR-NAME-OF-FORWARDING projects/PROJECT-NAME/global/firewalls/k8s-fw-aefb2110aad9e11ea971d42010a9c00a`
    
     ~ source_ranges           = [
         - "0.0.0.0/0",
         + "1.2.3.4/32",
       ]