我无法为天蓝色aksure上的Terraform kubernetes群集颁发有效证书。已成功创建域和证书(根据crt.sh创建了证书),但是该证书未应用于我的域,并且我的浏览器报告“ Kubernetes Ingress Controller伪证书”作为已应用的证书。
将terraform文件从一组有效的yaml文件(可以很好地颁发证书)转换为我的最佳技能。参见我的Terraform代码here。
更新!在最初的问题中,我也无法创建证书。这是通过使用here中的“ tls_cert_request”资源解决的。更改包含在下面的更新代码中。
有些东西我已经签出,发现不是问题
以下是我目前正在调查的一些区域,可能是该错误的来源。
如果有人有其他建议,我将不胜感激(因为这已经困扰了我很长时间了!)
provider "acme" {
server_url = var.context.cert_server
}
resource "tls_private_key" "reg_private_key" {
algorithm = "RSA"
}
resource "acme_registration" "reg" {
account_key_pem = tls_private_key.reg_private_key.private_key_pem
email_address = var.context.email
}
resource "tls_private_key" "cert_private_key" {
algorithm = "RSA"
}
resource "tls_cert_request" "req" {
key_algorithm = "RSA"
private_key_pem = tls_private_key.cert_private_key.private_key_pem
dns_names = [var.context.domain_address]
subject {
common_name = var.context.domain_address
}
}
resource "acme_certificate" "certificate" {
account_key_pem = acme_registration.reg.account_key_pem
certificate_request_pem = tls_cert_request.req.cert_request_pem
dns_challenge {
provider = "azure"
config = {
AZURE_CLIENT_ID = var.context.client_id
AZURE_CLIENT_SECRET = var.context.client_secret
AZURE_SUBSCRIPTION_ID = var.context.azure_subscription_id
AZURE_TENANT_ID = var.context.azure_tenant_id
AZURE_RESOURCE_GROUP = var.context.azure_dns_rg
}
}
}
resource "kubernetes_ingress" "pypi" {
metadata {
name = "pypi"
namespace = kubernetes_namespace.pypi.metadata[0].name
annotations = {
"kubernetes.io/ingress.class" = "inet"
"kubernetes.io/tls-acme" = "true"
"certmanager.k8s.io/cluster-issuer" = "letsencrypt-prod"
"ingress.kubernetes.io/ssl-redirect" = "true"
}
}
spec {
tls {
hosts = [var.domain_address]
}
rule {
host = var.domain_address
http {
path {
path = "/"
backend {
service_name = kubernetes_service.pypi.metadata[0].name
service_port = "http"
}
}
}
}
}
}
让我知道是否需要更多信息,我将使用遗漏的内容更新我的问题文本。最后,我将让terraform代码git repo保持运转并为他人提供帮助。
答案 0 :(得分:0)
我的问题的答案是我必须在群集中包括一个证书管理器,据我所知,没有本地的Terraform资源可以创建它。我最终将Helm用作入口和证书管理器。
设置最终比我最初想象的要复杂一些,就目前而言,它需要运行两次。这是由于未更新kubeconfig(必须再次应用“ set KUBECONFIG = .kubeconfig”,然后再运行“ terraform apply”)。因此,它并不漂亮,但它是“有效”的最小示例,可以使您的部署正常运行。
肯定有几种使用本地terraform资源简化pypi部署部分的方法,并且很容易解决了kubeconfig未被更新的问题。但是我还没有时间进一步调查。
如果有人有技巧为k8s集群提供更优雅,更实用且(可能最重要的)安全的最小地形设置,我想听听!
无论如何,对于感兴趣的人,可以找到here