Yaml GCP/GKE添加网络标签
我正试图找到一种方法来改善我们的基础设施,就像GCP中的代码一样。我希望我能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正在积极使用
网络标记来标记受防火墙规则影响的资源(允许、阻止)。这些标记与计算引擎实例、托管组和其他对象连接
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
时,您应该能够在转发规则中看到所需的更改,如下(部分):
应用防火墙规则转发流量后,应该修改你能举一个这样的规则的例子吗?在这种情况下,我们是否只谈论GKEGKE
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",
]