作为GCP中的代码情况,我试图找到一种方法来改进我们的基础设施。我希望我能
我希望通过在部署中添加标记,我可以让它自动将这些标记应用到它创建的任何计算资源或负载均衡器中。这样,就可以通过terraform创建一个防火墙规则,该规则适用于这些标记。
我是走错路了还是有办法这么做?这不仅是为了自动化防火墙规则管理,也是为了清理可能干扰操作的不必要规则。
发布于 2020-06-14 21: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和GKE
的LoadBalancer
创建了一个LoadBalancer
示例。步骤:
假设:
Terraform
已安装并可访问GCP
GKE
集群已经准备好了kubectl
设置为连接到上面的群集。有关上述步骤的参考:Learn.hashicorp.com: Terraform:供应GKE集群
至于Ingress
。管理它将在很大程度上取决于所使用的解决方案如下:
ingress-nginx
ingress-gce
产生工作量
下面的示例nginx deployment
将用于响应请求:
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
之后,该部分将输出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
中创建资源转发规则的
- 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.
示例定义:
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`
在发布$ terraform apply
时,您应该能够看到forwarding rule
中所需的更改,如下所示(部分):
~ source_ranges = [
- "0.0.0.0/0",
+ "1.2.3.4/32",
]
应用防火墙规则转发流量后,应该修改!
https://stackoverflow.com/questions/61660732
复制相似问题