Para aprender um pouco mais sobre o K8S, comecei a executar um cluster K3S de servidor/nó único como um laboratório doméstico. Mas acredito que cheguei a um impasse na minha compreensão do modelo de rede, talvez específico do K3S.
Até aí tudo bem, exceto que eu queria aplicar um certificado TLS a alguns serviços + entradas que configurei.
Em um deles configurei um certificado TLS como segredo e apliquei no Ingress associado ao serviço, porém sempre consigo o TRAEFIK DEFAULT CERT
, que você pode ver aqui .
Pelo que entendi, o K3S vem com Traefik e ServiceLB pré-empacotados para não depender de balanceadores de carga externos de serviços em nuvem (AWS etc). Meu primeiro palpite foi que o Traefik iria "descobrir" as rotas configuradas em meu Ingress e fazer proxy do tráfego TLS, usando assim o certificado que configurei. Claramente, este não é o caso, então suponho que preciso configurar um certificado TLS para a própria instância do Traefik.
Minhas perguntas são então
- Como posso configurar este certificado no K3S e preciso de um certificado curinga se pretendo ter vários projetos/domínios atingindo este cluster? (Eu preferiria gerenciar os certificados por projeto)
- Quais são as funções do ServiceLB e do Traefik no modelo de rede K3S? Se o Traefik estiver obtendo o tráfego 80 e 443, ele está apenas encaminhando o tráfego para o ServiceLB, que o encaminhará para o recurso Ingress?
Caso seja necessário, aqui está minha configuração de entrada/serviço
resource kubernetes_service_v1 snitch_service {
metadata {
name = "snitch"
namespace = module.namespace.name
}
spec {
selector = {
app = "snitch"
}
type = "LoadBalancer"
port {
name = "main"
port = 3010
target_port = 3000
node_port = 30003
}
}
}
resource kubernetes_secret_v1 tls_secret {
metadata {
name = "snitch-tls-cert"
namespace = "my-namespace"
}
type = "kubernetes.io/tls"
data = {
"tls.crt" = base64encode(my_certificate)
"tls.key" = base64encode(my_certificate_private_key)
}
}
resource kubernetes_ingress_v1 snitch_ingress {
metadata {
name = "snitch"
namespace = "my-namespace"
annotations = {
"ingress.kubernetes.io/ssl-redirect" = "false"
}
}
spec {
tls {
hosts = [local.subdomain]
secret_name = "snitch-tls-cert"
}
rule {
host = local.subdomain
http {
path {
path = "/"
path_type = "Prefix"
backend {
service {
name = "snitch"
port {
number = 3010
}
}
}
}
}
}
}
}
Obrigado!