kubernetes 使用Terraform向Ingress添加多个后端

xwmevbvl  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(194)

我在Terraform中部署了一个GKE集群和2个Helm提供商版本。
基本上,我正在部署2个测试应用程序,该应用程序编写自定义消息,Nginx入口应根据路径前缀重定向到一个或另一个,如果我手动将每个版本的服务名称添加到Ingress规则/后端,它可以工作,但我希望在应用terraform时自动完成,部署版本,部署入口,一旦服务名称可用,将名称传递给Ingress,这样的话,如果我们有10个不同路径的版本,我们只需要应用terraform添加更多的变量Map。
所以,这是可能的?有输出并将其传递给一个变量?就像在Terraform中一样。
我的Helm资源看起来像这样:

  1. resource "helm_release" "helm_releases" {
  2. for_each = var.releases_map
  3. name = each.key
  4. chart = each.value.chart_source
  5. namespace = each.value.namespace
  6. create_namespace = each.value.create_namespace
  7. values = [
  8. "${file("./helm-app/values.yaml")}"
  9. ]
  10. set {
  11. name = "deployment.replicaCount"
  12. value = each.value.replica_count
  13. }
  14. .
  15. .
  16. }

字符串
我的variable "releases_map" {}看起来像这样:

  1. releases_map = {
  2. "gke-test-1" = {
  3. chart_source = "./helm-app"
  4. namespace = "gke-ns"
  5. create_namespace = true
  6. service_type = "ClusterIP"
  7. replica_count = "3"
  8. service_port = "80"
  9. container_image = "publicrepo/helm-app"
  10. image_version = "1.10"
  11. ingress_configured = true
  12. path_prefix = "custom-message"
  13. message = "test-1"
  14. }
  15. "gke-test-2" = {
  16. chart_source = "./helm-app"
  17. namespace = "gke-ns"
  18. create_namespace = false
  19. service_type = "ClusterIP"
  20. replica_count = "3"
  21. service_port = "80"
  22. container_image = "publicrepo/helm-app"
  23. image_version = "1.10"
  24. ingress_configured = true
  25. path_prefix = "custom-message"
  26. message = "test-2"
  27. }
  28. }


我在想一个范围,但我有点迷路了,在我的入口。yaml:

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: nginx-ingress
  5. spec:
  6. rules:
  7. - http:
  8. paths:
  9. {{- range .Values.ingress}}
  10. - pathType: {{ .pathPrefix }}
  11. backend:
  12. service:
  13. name: {{ include "helm-app.name" . }}
  14. port:
  15. number: {{ .Values.ingress.port }}
  16. path: {{ .Values.ingress.path }}
  17. {{- end}}


我在values.yaml中有一些值,但我们的想法是覆盖这些值,并如上所示使用Terraform传递这些值。

qybjjes1

qybjjes11#

我最终使用了来自Kubernetes Terraform提供商的Ingress资源:
因此,动态块将在变量中添加新版本,并将它们添加到路径中。

  1. resource "kubernetes_ingress_v1" "ingress-nginx" {
  2. wait_for_load_balancer = true
  3. metadata {
  4. name = var.ingress_name
  5. namespace = var.ingress_namespace
  6. annotations = {
  7. "kubernetes.io/ingress.class" = "nginx"
  8. "nginx.ingress.kubernetes.io/rewrite-target" = "/$2"
  9. }
  10. }
  11. spec{
  12. rule {
  13. http {
  14. dynamic "path" {
  15. for_each = var.releases_map
  16. content {
  17. backend {
  18. service {
  19. name = "helm-app-${path.key}"
  20. port {
  21. number = path.value.service_port
  22. }
  23. }
  24. }
  25. path = "/${path.value.path_prefix}(/|$)(.*)"
  26. }
  27. }
  28. }
  29. }
  30. }
  31. }

字符串

展开查看全部

相关问题