Quando seu gateway de entrada ASM precisa encerrar tráfego HTTPS, utilize certificados SSL gerenciados pelo Certificate Management Service (antigo SSL Certificate). Em vez de criar Secrets do Kubernetes manualmente, implante certificados diretamente do console do Certificate Management Service no cluster do plano de dados do Container Service for Kubernetes (ACK). O gateway referencia o certificado implantado para realizar a terminação TLS.
Este tópico aborda quatro etapas: concessão de permissões, implantação do certificado como um Secret do Kubernetes, configuração do recurso Istio Gateway para TLS e verificação do acesso HTTPS.
Pré-requisitos
Um certificado SSL está disponível no console do Certificate Management Service. Você pode comprar um certificado ou carregar um existente.
A aplicação httpbin está implantada no cluster gerenciado pelo ASM.
Etapa 1: Conceder acesso do Certificate Management Service ao cluster ACK
O Certificate Management Service utiliza a função do Resource Access Management (RAM) AliyunCASDefaultRole para acessar e gerenciar clusters ACK. Conceda as permissões necessárias a essa função antes de implantar certificados.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Authorizations.
-
Clique na aba RAM Roles, insira
AliyunCASDefaultRolena caixa de pesquisa e clique em Manage Permissions.Nota: Se a mensagem AliyunCASDefaultRole Does Not Exist aparecer, crie a função RAM para o Certificate Management Service e conceda permissões primeiro.
-
Na caixa de diálogo Permission Management, clique em + Add Permissions e configure os seguintes campos:
Campo
Valor
Cluster
Selecione o cluster de destino na lista suspensa.
Namespace
Selecione
istio-system.Permission Management
Escolha Restricted User.
Clique em Submit Authorization.
Etapa 2: Implantar o certificado no cluster ACK
Após a implantação, o Certificate Management Service cria um Secret do Kubernetes do tipo kubernetes.io/tls no namespace istio-system. O gateway de entrada lê esse Secret para realizar a terminação TLS.
Nota: Este tópico usa o nome de domínio test.com como exemplo. Substitua-o pelo seu domínio real.
Implantar o certificado
-
Acesse o console do Certificate Management Service.
Se esta for a primeira vez que você utiliza o recurso de implantação, siga as instruções na tela para conceder as permissões necessárias. Para mais detalhes, consulte Conceder permissões para acessar recursos de nuvem.
No painel de navegação à esquerda, escolha Certificate Management > SSL Certificate Management.
-
Na página SSL Certificate Management, clique na aba correspondente ao tipo do seu certificado, localize-o e clique em Deploy na coluna Actions.
Nota: Certificados emitidos por uma autoridade certificadora privada (CA) aparecem na aba Manage Uploaded Certificates.
-
Na etapa Select Resource da página Create Task, selecione os serviços de nuvem e recursos de destino e clique em Preview and Submit.
O sistema associa automaticamente seu certificado SSL aos recursos de serviço de nuvem que já possuem um certificado SSL configurado. Os recursos correspondentes aparecem na seção Selected Resources. Ajuste a seleção conforme necessário.

Caso o recurso de destino não apareça:
-
Verifique a seção Total Resources. Se os recursos ainda estiverem sendo sincronizados (acinzentados), aguarde a conclusão da sincronização.

Se a sincronização estiver concluída, mas o recurso ainda não aparecer, confirme se os pré-requisitos de implantação foram atendidos.
-
-
No painel Task Preview, confirme as informações da instância do certificado e do recurso de serviço de nuvem e clique em Submit.
Nota: A pré-visualização exibe o número de certificados correspondentes e as cotas de implantação consumidas. Uma contagem de certificados correspondentes igual a 0 indica que o certificado não corresponde ao recurso selecionado. Revise sua seleção de certificados antes de prosseguir.
Obter o nome do Secret
Após a implantação, obtenha o nome do Secret para referenciá-lo na configuração do Gateway:
kubectl -n istio-system get secret -l alibabacloud.com/ssl-certificate-identifier=${CertIdentifier of the SSL certificate}
Saída esperada:
NAME TYPE DATA AGE
cas-cert-305xxx76 kubernetes.io/tls 2 10m
Anote o nome do Secret (por exemplo, cas-cert-305xxx76) para usar na próxima etapa.
Etapa 3: Configurar o recurso Gateway para HTTPS
Atualize o recurso Istio Gateway criado quando você implantou a aplicação httpbin. Adicione um bloco de servidor HTTPS que referencie o Secret obtido na etapa anterior.
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: httpbin
namespace: default
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- '*'
port:
name: test
number: 80
protocol: HTTP
- hosts:
- 'test.com'
port:
name: https
number: 443
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: cas-cert-305xxx76 # Replace with your Secret name from Step 2
EOF
Campos principais no bloco de servidor HTTPS:
|
Campo |
Descrição |
|
|
Nome de domínio correspondente ao certificado SSL (por exemplo, |
|
|
O HTTPS escuta na porta |
|
|
|
|
|
Nome do Secret do Kubernetes que contém o certificado. Deve corresponder ao nome do Secret obtido na Etapa 2. |
Etapa 4: Verificar o acesso HTTPS
-
Obtenha o endereço IP do gateway de entrada:
export GATEWAY_IP=$(kubectl get service istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}') -
Envie uma solicitação de teste via HTTPS:
curl -vk --resolve test.com:443:${GATEWAY_IP} https://test.com/status/418Saída esperada (abreviada):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use h2 * Server certificate: * subject: CN=test.com; O=myexample organization ... > GET /status/418 HTTP/2 > Host: test.com ... < HTTP/2 418 < server: istio-envoy ... -=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`Uma resposta bem-sucedida inclui tanto os detalhes do handshake TLS (TLSv1.3, certificado do servidor para
test.com) quanto um código de status HTTP/2 418 da aplicação httpbin.