ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【解决了一个小问题】terraform创建service后,如何获取VIP的值?

2022-06-17 17:02:27  阅读:190  来源: 互联网

标签:service kubernetes vip storage vm qcloud terraform VIP


创建一个pod后,再为这个pod创建一个对应的service,便于公开一个地址给外部访问。
有时候需要根据service的vip,再进行下一步的配置。
下面的代码演示如何获取service的vip:

# 最核心的配置
terraform {
  required_providers {
    kubernetes = {
      source  = "hashicorp/kubernetes"
      version = ">= 2.0.0"
    }
  }

  backend "local" {

  }
}

# TKE群集的IP和KEY
provider "kubernetes" {
  config_path = "../tencentyun-cls-xxxx-config.yaml"
}

# 这里省略创建容器的代码

# 创建POD对应的service
resource "kubernetes_service" "vm-storage-service" {
  metadata {
    name      = "vm-storage-services"
    namespace = "default"
    labels    = {
          "k8s-app"                    = "vm-storage"
          "qcloud-app"                 = "vm-storage"
        }
    annotations = {
      "description"                                                 = "headless service for vm-storage"
      "service.kubernetes.io/qcloud-loadbalancer-clusterid"         = "cls-xxxxxx"
      "service.kubernetes.io/qcloud-loadbalancer-internal-subnetid" = "subnet-xxxxxx"
    }
  }

  spec {
    port {
      name        = "8482-80-tcp"
      port        = "80"
      protocol    = "TCP"
      target_port = "8482"
    }
    selector                = {
          "k8s-app"                    = "vm-storage"   # 这里是绑定的POD
          "qcloud-app"                 = "vm-storage"
        }
    session_affinity        = "None"
    type                    = "LoadBalancer"
    external_traffic_policy = "Cluster"
  }
}

# 可以在执行完成后输出VIP
output "load_balancer_ip" {
  value = "${kubernetes_service.vm-storage-service.status.0.load_balancer.0.ingress.0.ip}"  # vm-storage-service 是上面创建的 service 的名字
}

# config-map的建立方法
# 可以把vip写入配置
resource "kubernetes_config_map" "ahfu-vm-storage-vip" {
  metadata {
    name      = "ahfu-vm-storage-vip"
    namespace = "default"
  }
  data = {
      "my.yaml" = "${kubernetes_service.vm-storage-service.status.0.load_balancer.0.ingress.0.ip}"
  }
}

P.S 能够直接引用output的值呢?代码中死活做不到(只有父module引用子module的情况),希望有研究明白的小伙伴给个例子。
Have fun!

标签:service,kubernetes,vip,storage,vm,qcloud,terraform,VIP
来源: https://www.cnblogs.com/ahfuzhang/p/16386339.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有