如何引用Azure ACS集群Master VM的公网IP地址?
获取ACS-Engine创建的K8s Master节点公网IP的方法
我来帮你解决这个问题,你需要的Master节点公网IP确实不是first_master_ip(那个是Master的静态私有IP),下面分两种方法来获取它:
方法一:在Terraform内部直接引用(推荐)
你可以通过Terraform的Azure数据源来直接获取Master节点的公网IP,这样不需要依赖外部CLI命令,能直接在你的配置里使用:
添加一个
azurerm_public_ip数据源到你的main.tf中:data "azurerm_public_ip" "master" { name = "${var.dns_prefix}-master-0-pip" resource_group_name = azurerm_resource_group.default.name # 必须等acs-engine完成集群创建后再获取 depends_on = [null_resource.run_acs_engine] }这里的名称格式
${var.dns_prefix}-master-0-pip是ACS-Engine默认生成的公网IP命名规则(单Master节点的情况),如果是多Master,第二个节点的公网IP名称会是${var.dns_prefix}-master-1-pip,以此类推。现在你可以在local-exec provisioner里直接引用这个IP了,比如用于Ansible的配置:
resource "null_resource" "ansible_config" { provisioner "local-exec" { command = "ssh ${var.admin_user}@${data.azurerm_public_ip.master.ip_address} 'echo Connected' && ansible-playbook -i ${data.azurerm_public_ip.master.ip_address}, your-playbook.yml" } depends_on = [data.azurerm_public_ip.master] }
方法二:通过Azure CLI获取
如果你需要用CLI手动获取,首先解决cluster-name的问题:
- ACS-Engine生成的集群名称可以在
_output/<你的dns前缀>/azuredeploy.parameters.json文件里找到,查看clusterName字段的值,通常它和你设置的dns_prefix变量一致。
然后用以下命令获取Master节点的公网IP:
# 替换<resource-group-name>和<cluster-name>为你的实际值 az network public-ip show --resource-group <resource-group-name> --name <cluster-name>-master-0-pip --query "ipAddress" -o tsv
执行后会直接输出公网IP地址,你可以用它来SSH登录:ssh user@<输出的IP>
补充说明
你之前注意到的first_master_ip变量,是ACS-Engine配置中用于指定Master节点的静态私有IP(集群内部通信用),不是用于外部SSH访问的公网IP,所以确实不是你需要的值。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

