【解决了一个小问题】terraform创建service后,如何获取VIP的值?
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!
创建一个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的情况),希望有研究明白的小伙伴给个例子。
此外,shell中可以这样引用 terraform apply后的output值:
terraform output # apply后,查询所有的output变量
load-balancer-ip-ahfu = "9.xxx.196.21"
terraform output load-balancer-ip-ahfu # 根据名字获取output的值
"9.xxx.196.21"
Have fun!
【解决了一个小问题】terraform创建service后,如何获取VIP的值?的更多相关文章
- 【解决了一个小问题】go.mod文件中引用另一个库,总会自动拉取新版本
我的项目依赖某个旧的公共库: require ( git.xxx.com/myprj/mylib v0.0.43 ) 可以编译的时候,系统总会自动加上这样的路径: require ( git.xxx. ...
- 【解决了一个小问题】golang protocol buffers 3中去掉json标签中的omitempty
参考了这篇帖子:golang protobuf从生成的json标记中删除omitempty标记 由于是在windows上开发,因此写了一个python脚本来解决: remove_tag.py impo ...
- 【解决了一个小问题】golang gin框架中的模板,让模板中的参数不要做HTML转义
代码中使用了类似的方式来向模板填充参数: c.HTML(200, "list.html", gin.H{"data":builder.String()}) 模板 ...
- 【解决了一个小问题】如何展示VictoriaMetrics组件上报的bucket数据
VM体系还真的是不一(he)样(qun), 它上报的监控数据长这样: vmagent_remotewrite_block_size_rows_bucket{vmrange="2.448e+0 ...
- 【解决了一个小问题】golang build中因为缓存文件损坏导致的编译错误
编译的过程中出现了一个吓人的错误: GOROOT=C:\Go #gosetup GOPATH=C:\Users\ahfuzhang\go #gosetup C:\Go\bin\go.exe mod t ...
- 【解决了一个小问题】golang中引用一个路径较长的库,导致goland中出现"module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2"
在项目中的go.mod文件中有这样一句: require ( github.com/xxx-devops/xx1/sdk/go v2.2.3 ) 项目的编译没有问题,但是goland中出现如下提示: ...
- 【解决了一个小问题】alpine镜像中,busybox的date命令获取昨天的日期
直接上答案: date -d@"$(( `date +%s`-86400))" +"%Y-%m-%d"
- 【解决了一个小问题】alert manager中的cluster.advertise-address参数是什么意思?
如果在启动 alert manager的时候,不填写参数: /usr/bin/alertmanager --config.file=/etc/alert_manager/alertmanager.ya ...
- 【解决了一个小问题】vmselect对应的vmstorage端口配置错误导致的问题
从vmselect查询的时候,出现如下错误: error when executing query="up" on the time range (start=1639388706 ...
- 【解决了一个小问题】golang的go.mod中出现版本错误
代码中的这一句使用prometheus2.28.0版本的代码: import "github.com/prometheus/prometheus/prompb" 我把require ...
随机推荐
- SAST + SCA: 结合使用安全升级
据 SAP 称,当今85%的安全攻击针对的是软件应用程序,因此一些列应用程序安全测试工具也应运而生.为了避免这些恶意攻击,企业通常使用应用程序安全测试工具来去缓解和解决安全风险,而不同的工具对应的使用 ...
- ME51N 创建采购申请
1业务说明 当寻源后,将寻源结果汇总,并创建采购申请,之后据此创建采购订单. 此文档使用BAPI:BAPI_REQUISITION_CREATE创建采购申请 2前台实现 事务代码:ME51N 3代码实 ...
- SpringBoot 项目实战 | 瑞吉外卖 Day01
一.软件开发整体介绍 1.软件开发流程 2.角色分工 项目经理:对整个项目负责,任务分配.把控进度 产品经理:进行需求调研,输出需求调研文档.产品原型等 UI设计师:根据产品原型输出界面效果图 架构师 ...
- 经典Python案例实现
入门_30个常用python实现 .pdf 一. 二. 三. 四. 五.函数篇 5.1 计算圆的面积 from math import pi as PI def CircleArea(r): if i ...
- nginx导致获取客户端访问ip都是nginx服务器的地址问题解决
java 获取用户ip的方法 /** * 获得客户端 ip * @param request * @return */ public String getRemortIP(HttpServletReq ...
- 密码加密bcrypt
- Git-签名-user-email
- 远程连接-ssh
- [转帖]PostgreSQL数据库的版本历史及关键变化
https://cloud.tencent.com/developer/article/2311843 举报 PostgreSQL是一个强大的开源关系型数据库,它的发展历程充满了创新和卓越的设计.让我 ...
- [转帖]Prometheus系列之Grafana 版本9.0.0 设置Email邮件报警实战
目录 1. 配置文件conf/defaults.ini修改 2. Grafana Web页面配置报警邮箱接收者 3. 创建Dashboard 4. 创建Alert的文件夹 5. 设置Notificat ...
