Para criptografar o tráfego entre clientes e um listener do Application Load Balancer (ALB), associe um certificado SSL/TLS ao listener HTTPS. O ALB Ingress oferece três métodos de configuração de certificados: descoberta automática, Kubernetes Secrets e vinculação no nível do AlbConfig.
Escolha um método
|
Método |
Armazenamento do certificado |
Descoberta do certificado |
Uso entre namespaces |
Renovação do certificado |
|
Descoberta automática |
Certificate Management Service |
Pelo nome de domínio vinculado ao certificado |
Sim |
Carregue um novo certificado ou renove o existente no Certificate Management Service e atualize o Ingress |
|
Kubernetes Secret |
Kubernetes Secret |
Pelo nome do Secret |
Não — limitado ao namespace do Secret |
Atualize o Secret |
|
Vinculação via AlbConfig |
Certificate Management Service |
Pelo ID do certificado |
— |
— |
Use a descoberta automática se os certificados já estiverem adquiridos ou carregados no Certificate Management Service e você desejar vinculação automática baseada em nomes de domínio.
Use Kubernetes Secrets para gerenciar certificados dentro do cluster, por exemplo, com o cert-manager.
Use a vinculação via AlbConfig quando precisar de controle explícito sobre qual certificado associar a um listener específico ou quando um listener for compartilhado entre vários Ingresses.
Uma instância de ALB suporta no máximo 25 certificados. Essa contagem inclui todos os certificados associados a todos os listeners da instância, inclusive aqueles anexados por meio de Ingresses. Para mais detalhes, consulte Métodos para calcular cotas do ALB.
Compatibilidade ao combinar métodos
|
Combinação |
Comportamento |
|
Descoberta automática + Secret, mesmo domínio |
O certificado do Secret tem precedência |
|
Descoberta automática + Secret, domínios diferentes |
Cada certificado é usado para seu respectivo domínio |
|
Descoberta automática + AlbConfig, mesmo listener |
Apenas o certificado do AlbConfig é utilizado |
|
Secret + AlbConfig, mesmo listener |
Ambos os certificados são utilizados |
Pré-requisitos
Antes de começar, verifique se você possui:
-
Um certificado confiável obtido de uma das seguintes formas:
Adquirido no Certificate Management Service
Adquirido de outra autoridade certificadora (CA)
(Opcional) Um certificado autoassinado gerado para testes — consulte Etapa 2: Gerar um certificado autoassinado (opcional)
Visão geral
Por padrão, um AlbConfig possui um listener HTTP na porta 80. Adicione um listener HTTPS e configure um certificado. Sem certificado, o listener HTTPS fica indisponível e o controlador do ALB Ingress falha.
Etapa 1: Adicionar um listener HTTPS ao AlbConfig
-
Edite o AlbConfig:
kubectl edit albconfig <albconfig-name> -
Adicione uma entrada de listener para a porta 443:
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: addressAllocatedMode: Fixed addressType: Internet zoneMappings: - vSwitchId: vsw-bp19sXXXXXXX176iv - vSwitchId: vsw-bp1boXXXXXXXu74xz listeners: - port: 80 protocol: HTTP - port: 443 # Adds the HTTPS listener; a certificate is required for this listener protocol: HTTPS
Etapa 2: Gerar um certificado autoassinado (opcional)
Ignore esta etapa se você já possuir um certificado do Certificate Management Service ou de uma CA.
Execute os comandos OpenSSL a seguir para gerar um certificado autoassinado:
openssl genrsa -out albtop-key.pem 4096
openssl req -subj "/CN=demo.alb.ingress.top" -sha256 -new -key albtop-key.pem -out albtop.csr
echo subjectAltName = DNS:demo.alb.ingress.top > extfile.cnf
openssl x509 -req -days 3650 -sha256 -in albtop.csr -signkey albtop-key.pem -out albtop-cert.pem -extfile extfile.cnf
Saída esperada:
Certificate request self-signature ok
subject=CN=demo.alb.ingress.top
Substitua demo.alb.ingress.top pelo seu nome de domínio.
Navegadores e clientes não confiam em certificados autoassinados. Use-os apenas para testes, nunca em produção.
Etapa 3: Criar recursos de exemplo
Além do AlbConfig, o ALB Ingress requer um Deployment, Service, IngressClass e Ingress para funcionar corretamente.
-
Crie um arquivo chamado
https-quickstart.yamlcom o seguinte conteúdo:apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: https-ingressclass spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb # Must match the name of your AlbConfig --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: https-ingress spec: ingressClassName: https-ingressclass rules: - host: demo.alb.ingress.top # Replace with your domain name http: paths: - backend: service: name: https-svc port: number: 443 path: / pathType: Prefix --- apiVersion: apps/v1 kind: Deployment metadata: name: https-deploy spec: replicas: 1 selector: matchLabels: app: https-deploy template: metadata: labels: app: https-deploy spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/acs-sample/old-nginx:latest imagePullPolicy: IfNotPresent name: https-deploy ports: - containerPort: 80 protocol: TCP --- apiVersion: v1 kind: Service metadata: name: https-svc spec: ports: - name: port1 port: 443 protocol: TCP targetPort: 80 selector: app: https-deploy sessionAffinity: None type: ClusterIP -
Se o AlbConfig tiver listeners HTTP e HTTPS, adicione a anotação
listen-portsao Ingress:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: https-ingress annotations: alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]' spec: # ... -
Aplique os recursos:
kubectl apply -f https-quickstart.yaml
Etapa 4: Configurar certificados
Escolha um dos métodos a seguir.
Método 1: Descoberta automática de certificados
Use este método se o certificado já estiver no Certificate Management Service e você quiser que o controlador do ALB Ingress o descubra automaticamente pela correspondência do nome de domínio.
Carregue o certificado no Certificate Management Service. Para mais detalhes, consulte Carregar um certificado SSL.
-
Edite o Ingress:
kubectl edit ingress https-ingress -
Adicione o campo
tlscom o nome de domínio vinculado ao certificado:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: https-ingress namespace: default spec: ingressClassName: alb rules: - host: demo.alb.ingress.top http: # ... tls: - hosts: - demo.alb.ingress.top # Set the value to the domain name bound to the certificate. The domain name must be the same as the domain name specified in the "rules: host" field.
Após essa configuração, a instância de ALB cria automaticamente um listener HTTPS:443 .
Método 2: Kubernetes Secret
Use este método para gerenciar certificados dentro do cluster, por exemplo, com o cert-manager.
-
Codifique os arquivos de certificado e chave em Base64:
echo -n `cat albtop-key.pem` | base64 echo -n `cat albtop-cert.pem` | base64Crie um arquivo chamado
albconfig.yamle substitua os espaços reservados pela saída codificada em Base64:apiVersion: v1 kind: Secret metadata: name: https-secret type: kubernetes.io/tls data: tls.key: | <base64-encoded-albtop-key.pem> tls.crt: | <base64-encoded-albtop-cert.pem>Aplique o Secret:
kubectl apply -f https-secret.yaml -
Edite o Ingress:
kubectl edit ingress https-ingress -
Adicione o campo
tlscom o nome do Secret e o nome de domínio:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: https-ingress namespace: default spec: ingressClassName: alb rules: - host: demo.alb.ingress.top http: # ... tls: - hosts: - demo.alb.ingress.top # Must match rules.host exactly secretName: https-secret # References the Secret that holds the certificate
Após configurar o Secret, o certificado é carregado automaticamente no Certificate Management Service com o nomedefault-https-secret-******. A instância de ALB cria automaticamente um listenerHTTPS:443.
Método 3: Vinculação via AlbConfig
Use este método para vincular um certificado específico a um listener usando seu ID. Quando um certificado é vinculado no nível do listener, o Ingress deixa de usar a descoberta automática para esse listener.
Carregue o certificado no Certificate Management Service. Para mais detalhes, consulte Carregar e compartilhar um certificado SSL.
-
Obtenha o ID do certificado:
Faça login no console do Certificate Management Service.
No painel de navegação à esquerda, escolha Certificate Management > SSL Certificate Management.
Na página SSL Certificate Management, clique em Manage Uploaded Certificates.
Localize o certificado, clique em More na coluna Actions e visualize o campo CertIdentifier no painel Certificate Details.
-
Edite o AlbConfig para vincular o certificado ao listener HTTPS:
kubectl edit albconfig <albconfig-name>apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: addressType: Intranet name: xiaosha-alb-test listeners: - port: 80 protocol: HTTP - port: 443 protocol: HTTPS certificates: - CertificateId: 756****-cn-hangzhou # The certificate ID from CertIdentifier IsDefault: true # Marks this as the default certificate for the listener -
Edite o Ingress para adicionar a anotação de porta do listener:
kubectl edit ingress https-ingressapiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]' # Add {"HTTP": 80} to also handle HTTP traffic name: https-ingress spec: ingressClassName: https-ingressclass rules: - host: demo.alb.ingress.top http: paths: - backend: service: name: https-svc port: number: 443 path: / pathType: Prefix
Após a atualização do AlbConfig, a instância de ALB cria automaticamente um listener HTTPS:443 .
Etapa 5: Verificar o resultado
-
Obtenha o endereço do Ingress:
kubectl get ingressSaída esperada:
NAME CLASS HOSTS ADDRESS PORTS AGE https-ingress https-ingressclass demo.alb.ingress.top alb-********.alb.aliyuncs.com 80, 443 83mAnote os valores nas colunas
HOSTSeADDRESS. -
Envie uma solicitação HTTPS para o Service de backend:
curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.comSubstitua
demo.alb.ingress.topealb-********.alb.aliyuncs.compelos valores obtidos na etapa anterior. Se o certificado estiver configurado corretamente, o comando retornará:old
Próximos passos
Para receber solicitações de clientes que usam o protocolo HTTP/3, consulte Usar listeners QUIC para suportar HTTP/3 e melhorar o desempenho da rede.
Para ativar a autenticação mútua HTTPS em um listener, consulte Usar autenticação mútua HTTPS para aumentar a segurança do serviço.