简体   繁体   中英

Referencing Azure ACS Cluster Master VM Public IP?

I'm using this repo to create a kubernetes cluster on Azure using acs-engine.

I am wondering if anyone can help me identify how to reference the master VM's public IP address.

This would be used to ssh into the master VM ( ssh user@public-ip ), which is important because I want to run local-exec provisioners to configure my cluster with Ansible.

I don't believe that it is the first_master_ip in the below main.tf (this is given a value on the repo's variables.tf), though I also don't know how to reference this IP as well.

One other thing that I have tried is to obtain the master VM public IP address using the azure command line, however I also haven't had any success with this because I don't know how to get the cluster-name , which would be passed in with az acs kubernetes browse -g <resource-group-name> -n <cluster-name>

Any help would be greatly greatly appreciated as I've really hit a road block with this.

provider "azurerm" {
  subscription_id = "${var.azure_subscription_id}"
  client_id       = "${var.azure_client_id}"
  client_secret   = "${var.azure_client_secret}"
  tenant_id       = "${var.azure_tenant_id}"
}

# Azure Resource Group
resource "azurerm_resource_group" "default" {
  name     = "${var.resource_group_name}"
  location = "${var.azure_location}"
}

resource "azurerm_public_ip" "test" {
  name                         = "acceptanceTestPublicIp1"
  location                     = "${var.azure_location}"
  resource_group_name          = "${azurerm_resource_group.default.name}"
  public_ip_address_allocation = "static"
}

data "template_file" "acs_engine_config" {
  template = "${file(var.acs_engine_config_file)}"

  vars {
    master_vm_count = "${var.master_vm_count}"
    dns_prefix      = "${var.dns_prefix}"
    vm_size         = "${var.vm_size}"

    first_master_ip                 = "${var.first_master_ip}"
    worker_vm_count                 = "${var.worker_vm_count}"
    admin_user                      = "${var.admin_user}"
    ssh_key                         = "${var.ssh_key}"
    service_principle_client_id     = "${var.azure_client_id}"
    service_principle_client_secret = "${var.azure_client_secret}"
  }

}

# Locally output the rendered ACS Engine Config (after substitution has been performed)
resource "null_resource" "render_acs_engine_config" {
  provisioner "local-exec" {
    command = "echo '${data.template_file.acs_engine_config.rendered}' > ${var.acs_engine_config_file_rendered}"
  }

  depends_on = ["data.template_file.acs_engine_config"]
}

# Locally run the ACS Engine to produce the Azure Resource Template for the K8s cluster
resource "null_resource" "run_acs_engine" {
  provisioner "local-exec" {
    command = "acs-engine generate ${var.acs_engine_config_file_rendered}"
  }

  depends_on = ["null_resource.render_acs_engine_config"]
}

I have no experience with terraform but acs-engine sets up a lb with a public ip that goes through your master (or balances across multiple masters). You find the ip of that lb by using <dns_prefix>.<region>.cloudapp.azure.com .

But if you need the ip to provision something extra, this won't be enough when you have multiple masters.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM