Tailscale + Kubernetes + Istio(证书)

问题描述 投票:0回答:1

我有一个运行 Web 服务器、Istio 入口网关和一些微服务的 Kubernetes 集群,我已将这些微服务安装在家里的裸机 tailscale 节点上(并且仅在我的 tailnet 上,不可公开访问)。

我已经开始运行并且可以从我的 tailnet 访问该网站,现在我正在尝试通过 https 获取服务。我正在使用 Tailscale MagicDNS 功能。

我知道

tailscale cert <domain>
提供 .crt 和 .key 文件,并且我知道我可以将它们作为秘密添加到我的集群中,但我还不清楚如何完全连接它(也许与证书管理器有关? )也不知道我如何保持证书的新鲜度。如有任何帮助,我们将不胜感激!

kubernetes https istio cert-manager tailscale
1个回答
0
投票

@codedread

无需通过 Istio 入口网关,因为 tailscale 已被考虑为另一个网关。

这是我的工作实现,供您参考。这个设置可以很好地处理 TLS 证书

resource "kubernetes_namespace" "tailscale_system" {
  count = contains(var.enabled_addons, "tailscale-system") ? 1 : 0
  metadata {
    annotations = {
      name = "tailscale-system"
    }

    labels = merge(
      var.tags,
      {
        istio-injection                  = "false"
        "prometheus-metrics-collection"  = "true"
      },
    )

    name = "tailscale-system"
  }
}
resource "kubernetes_secret" "tailscale_secret" {
  metadata {
    name      = "operator-oauth"
    namespace = kubernetes_namespace.tailscale_system[0].metadata[0].name
  }

  data = {
    client_id     = var.tailscale_client_id
    client_secret = var.tailscale_client_secret
  }

  lifecycle {
    ignore_changes = [metadata[0].labels, metadata[0].annotations]
  }
}
resource "helm_release" "tailscale_operator" {
  count = contains(var.enabled_addons, "tailscale-system") ? 1 : 0
  depends_on = [
    kubernetes_namespace.tailscale_system,
    kubernetes_secret.tailscale_secret
  ]

  name      = "tailscale-operator"
  chart     = "./tailscale/deploy/chart-operator/."
  namespace = kubernetes_namespace.tailscale_system[0].metadata[0].name
  version   = "v0.1.0"
  values = [
    file("./tailscale/deploy/chart-operator/values.yaml")
  ]

  set {
    name  = "operatorConfig.hostname"
    value = "tailscale-operator-${var.tags.Environment}"
  }
}
resource "kubernetes_manifest" "argocd_server_tailscale_ingress" {
  provider = kubernetes

  manifest = {
    "apiVersion" = "networking.k8s.io/v1",
    "kind"       = "Ingress",
    "metadata" = {
      "name"      = "argocd-ingress",
      "namespace" = "argocd-system"
    },
    "spec" = {
      "defaultBackend" = {
        "service" = {
          "name" = "argocd-server",
          "port" = {
            "number" = 80
          }
        }
      },
      "ingressClassName" = "tailscale",
      "tls" = [
        {
          "hosts" = [
            "argocd-${var.environment}"
          ]
        }
      ]
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.