0

Hell, I am trying to deploy rke k8s with terraform, but I am not able to connect to the desired host via ssh:

 time="2022-02-28T11:17:38+01:00" level=warning msg="Failed to set up SSH tunneling for host [poc-k8s.my-domain.com]: Can't retrieve Docker Info: error during connect: Get \"http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info\": Unable to access node with address [poc-k8s.my-domain.com:22] using SSH. Please check if you are able to SSH to the node using the specified SSH Private Key and if you have configured the correct SSH username. Error: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain"

and this is the .tf file I am using:

terraform {
  required_providers {
    rke = {
      source = "rancher/rke"
      version = "1.3.0"
    }
  }
}

provider "rke" {
  log_file = "rke_debug.log"
}


resource "rke_cluster" "cluster" {
  nodes {
    address = "poc-k8s.my-domain.com"
    user    = "root"
    role    = ["controlplane", "worker", "etcd"]
    ssh_key = file("~/.ssh/root_key")
  }
  nodes {
    address = "poc-k8s.my-domain.com"
    user    = "root"
    role    = ["worker", "etcd"]
    ssh_key = file("~/.ssh/root_key")
  }
  addons_include = [
    "https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml",
    "https://gist.githubusercontent.com/superseb/499f2caa2637c404af41cfb7e5f4a938/raw/930841ac00653fdff8beca61dab9a20bb8983782/k8s-dashboard-user.yml",
  ]
}

resource "local_file" "kube_cluster_yaml" {
  filename = "~/.kube/kube_config_cluster.yml"
  sensitive_content  = "rke_cluster.cluster.kube_config_yaml"
}

The key if of course correct and I am able to connect to the desired host:

ssh -i ~/.ssh/root_key root@poc-k8s.my-domain.com

what am I missing here?

1 Answers1

0

[Update]

Cluster resource has delay_on_creation property that can be used

resource "rke_cluster" "cluster" {

  delay_on_creation = 180     

  (...)
}

I'm facing a similar issue. On the second run of terrafor apply it works correctly. In my case the issue is that docker is not up fast enough for RKE provider.

I've found following workaround from citynetwork / citycloud-examples:

resource "rke_cluster" "cluster" {     

  (...)

  depends_on = [null_resource.wait-for-docker]
}

resource "null_resource" "wait-for-docker" {
  provisioner "local-exec" {
    command = "sleep 180"
  }
  depends_on = [

  # list of servers docker being installed on

  (...) 

  ]
}

It waits for 180s which is not ideal, though.

dotnokato
  • 36
  • 1
  • 4