Em minha Artigo anterior Discuti, em um nível elevado, o novo recurso de conectividade pública no Autonomous Operator 1.2.0. Essa foi intencionalmente uma visão geral abstrata para convencer o usuário a aprender sobre as alegrias do DDNS, do TLS e da rede de camada 3.
Dê um peixe a um homem e você o alimentará por um dia. Ensine um homem a pescar e você o alimentará por toda a vida
Esperamos que todos vocês tenham investido tempo para aprender a pescar! (Este artigo fornece um tutorial prático sobre a configuração do Operator para que seja possível expor seus clusters do Couchbase com segurança na Internet pública.
Por que usar esse recurso?
As startups de tecnologia de hoje são mais focadas na nuvem do que as empresas tradicionais. Alguns argumentariam que a empresa tradicional está entrincheirada - protegendo os dados atrás de firewalls em data centers privados - e, sem dúvida, do ponto de vista da segurança, essa é a coisa certa a fazer.
O aumento da exposição à nuvem, embora seja um risco maior, também está se tornando menos preocupante com o passar do tempo. O mais importante é que a nuvem abre inúmeras portas para ganhos de agilidade e inovação. Conectar ofertas de serviços públicos por meio da Internet pública é um benefício enorme, que não pode ser obtido de forma fácil e econômica com serviços que ficam no local, escondidos atrás dos limites do NAT.
Um exemplo que me agrada bastante é o surgimento da função como serviço (FaaS). As funções são trabalhos de curta duração (geralmente baseados em contêineres) que respondem a estímulos e retornam um resultado. Elas são criadas sob demanda e automaticamente escalonadas de forma horizontal e instantânea para lidar com a carga de trabalho necessária. Você pode usar ofertas públicas de serviços FaaS hoje, sem perder tempo com a instalação e a configuração de infraestrutura virtual ou física. O AWS Lambda é uma dessas encarnações com a qual você talvez esteja familiarizado.
A menos que sua função seja pura (no sentido de que apenas processa dados), ela exigirá entradas, geralmente na forma de um banco de dados. Essas ofertas de FaaS, por operarem na Internet pública, também exigirão uma conexão com um banco de dados público. O estabelecimento de túneis VPN privados entre esses serviços pode ser difícil ou impossível.
É por esses motivos - interconectividade, simplicidade e agilidade - que oferecemos a opção de conectividade pública.
Segurança, segurança, segurança
Um serviço colocado na Internet pública enfrentará o escrutínio de agentes mal-intencionados de terceiros. A Internet está repleta de tentativas de coletar e explorar informações pessoais. Como um teste simples, conecte um sistema UNIX à Internet. Seus logs de SSH serão preenchidos rapidamente com tentativas de acessar a máquina usando dicionários de nomes de usuário e senhas comuns/roubados. Os firewalls mostrarão tentativas de verificação de portas abertas. Isso é apenas o normal aceito, e tem sido assim desde que me lembro.
Os bancos de dados, em particular, são um pote de mel para os criminosos que tentam explorar os sistemas a fim de obter acesso a listas de e-mails para ataques de phishing ou extrair detalhes de cartões de crédito para fraude e roubo de identidade. Você simplesmente precisa tornar esses serviços seguros.
O recurso de conectividade pública da operadora exige o uso de criptografia completa de ponta a ponta. Isso evita que bisbilhoteiros vejam informações confidenciais enquanto estiverem em redes públicas. Os certificados digitais formam uma relação de confiança entre clientes e servidores. Um cliente verificará se um servidor é válido para o nome do host ao qual tentou se conectar e se foi assinado por uma autoridade de certificação confiável.
O Operador permite o uso apenas de cadeias de certificados de servidor e não atua como uma autoridade de certificação, assinando certificados de servidor para servidores individuais à medida que a topologia muda. Atuar como uma CA permitiria que qualquer certificado fosse criado e assinado, por isso optamos pela abordagem segura. Como resultado, oferecemos suporte a um certificado curinga para o cluster como um todo. Ao usar certificados curinga, também precisamos usar o DNS público para que o cliente confirme que pode verificar se o certificado do servidor é válido para o host que está sendo contatado.
Esse histórico nos dá conhecimento suficiente para começar a implantar nosso banco de dados com conectividade pública.
Vamos começar
DNS
Conforme discutido, precisamos usar o DNS público para entrar em contato com os nós do cluster do Couchbase ao usar a conectividade pública. Esses DNSs podem ser comprados on-line de forma relativamente barata em registradores como Gandi, GoDaddy, Namecheap etc.
Também precisamos ser capazes de usar o DNS dinâmico. À medida que os nós são adicionados e removidos do nosso cluster do Couchbase, precisamos que as entradas correspondentes sejam adicionadas e removidas do DNS. Elas também precisam ser atualizadas se os endereços IP públicos desses nós mudarem. Isso se deve ao alto desempenho, ao sharding do lado do cliente usado pelos clientes do Couchbase e pelo XDCR. Usaremos o Kubernetes external-dns para realizar atualizações de DDNS. O link lista os provedores de DDNS compatíveis. Depois de adquirir um domínio DNS, você precisará delegar seus servidores de nomes ao provedor de DDNS escolhido. Minha escolha pessoal para este exemplo é Cloudflare. A etapa final de preparação é a criação de uma chave de API ou de outras credenciais para que o controlador external-dns se autentique com o provedor de DDNS e controle os registros de DNS exigidos pelo cluster do Couchbase.
TLS
Para a maioria das pessoas, essa é a parte mais mística do processo. As páginas da Web HTTPS simplesmente funcionam de forma transparente, portanto, o usuário comum não precisa se preocupar com isso no dia a dia. Não vou entrar em detalhes (pois isso é assunto para outro post), mas o que precisamos discutir são os principais aspectos que precisam ser vinculados à configuração de DNS escolhida.
Estou usando meu domínio DNS pessoal, spjmurray.com.brpara esta demonstração. Instalarei meu cluster do Couchbase em seu próprio namespace chamado 6c3c0075-b44a-11e9-9518-4a8d7629c69ae o próprio cluster será chamado de couchbase. É importante conhecer esses parâmetros porque eles nos permitem endereçar exclusivamente um cluster do Couchbase em nosso cluster do Kubernetes. O cluster do Couchbase será configurado de modo que seu domínio seja couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk. O operador exigirá a criação de registros A dentro desse domínio para cada nó, bem como o Console da Web do Couchbase.
Conhecendo nosso domínio, agora podemos determinar o nome alternativo do assunto do certificado curinga do DNS *.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk.
A ferramenta EasyRSA do OpenVPN é um método simples de gerar certificados. Primeiro, clone o repositório e inicialize-o.
1 |
git clone https://github.com/OpenVPN/easy-rsa |
1 |
cd easy-rsa/easyrsa3 |
1 |
./easyrsa init-pki |
Gere o certificado da CA e o par de chaves. Se você se lembra, a chave privada da CA é usada para assinar digitalmente um certificado de servidor. Um cliente pode então verificar se o certificado do servidor é autêntico com a chave pública da CA. Esse comando solicitará um nome de CA e uma senha. Após a conclusão, o certificado da CA poderá ser encontrado em pki/ca.crt.
1 |
./easy-rsa build-ca |
O certificado do servidor e o par de chaves são criados em seguida. Quando o TLS for especificado em sua configuração de cluster do Couchbase, o Operator usará o TLS para se comunicar com o cluster. Isso evita que senhas ou dados confidenciais sejam transmitidos em texto simples. Para dar suporte aos nomes DNS privados do Kubernetes, precisamos de outro nome alternativo de assunto curinga do DNS. O nopass também deve ser especificada para que a chave privada não seja criptografada e possa ser lida pelo servidor Couchbase. O comando a seguir solicitará uma senha; essa é a senha da chave privada da CA usada para assinar digitalmente o certificado.
1 |
./easy-rsa --subject-alt-name=DNS:*.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.svc,DNS:*.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk build-server-full server nopass |
Você pode verificar se o certificado está de acordo com o esperado examinando-o no OpenSSL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
openssl x509 -in cert -noout -text Certificado: Dados: Versão: 3 (0x2) Número de série: b8:a2:ab:74:2c:8a:88:bf:67:3f:a8:d3:9b:fd:09:19 Algoritmo de assinatura: sha256WithRSAEncryption Emissor: CN = Couchbase CA Validade Não antes: Aug 1 10:52:15 2019 GMT Não depois de : Jul 29 10:52:15 2029 GMT Assunto: CN = Servidor Couchbase Informações da chave pública do assunto: Algoritmo de chave pública: rsaEncryption Chave pública RSA: (2048 bits) Módulo: 00:b8:85:b5:41:16:67:1f:79:32:4c:ed:e1:44:cc: 55:65:db:a1:d1:99:6e:d1:d7:90:a6:5e:eb:4c:96: de:a4:70:dd:74:6c:76:13:75:01:5e:36:a2:5f:f0: 8b:cd:e8:8b:bd:68:2a:f2:5c:e8:3c:78:6d:71:92: db:2c:58:7c:e7:40:a5:73:cc:cd:f4:b7:c8:69:16: d3:c5:15:18:c0:56:d9:b3:f6:86:c6:22:8b:05:22: 77:c7:5c:ce:2a:3d:b8:e8:96:ea:c8:17:a8:3a:27: 7b:94:66:a1:80:89:a2:8b:25:5b:ed:72:ac:d5:29: 37:a1:e5:dd:9f:16:ac:a4:04:14:d8:89:cc:d0:08: f9:f1:58:1f:a7:fa:ee:2d:1a:e5:bd:03:ba:e7:9a: 79:f7:10:d7:0f:9b:bc:f9:cc:c9:03:97:58:78:9f: 68:78:b7:20:cf:5e:a8:67:7b:33:41:91:4a:8c:7c: 44:1a:25:86:ca:15:eb:9a:25:5e:80:23:65:9b:7a: 40:e4:55:c1:9c:93:c8:d6:72:e7:d8:d7:ac:dd:f9: 92:a8:89:c1:bc:ff:1a:7d:a5:e9:ab:6b:b8:3e:c4: 5f:b6:e6:30:45:5c:b4:5a:ce:fa:d9:12:28:ad:e6: 39:7b:39:4b:2e:a2:2a:16:f8:64:36:75:7d:59:78: 41:cf Expoente: 65537 (0x10001) Extensões X509v3: Uso da chave X509v3: crítico Assinatura digital, cifragem de chaves Uso da chave estendida X509v3: Autenticação do servidor Web TLS Restrições básicas do X509v3: críticas CA:FALSO X509v3 Subject Key Identifier: B8:7D:84:E9:AE:DF:38:90:B4:B5:CC:82:EA:B5:38:D2:35:12:4C:3F Identificador de chave de autoridade X509v3: keyid:78:49:35:9B:B4:03:26:81:B4:5A:68:8C:94:18:CE:2A:5A:12:FE:EE X509v3 Nome alternativo do assunto: DNS:*.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.svc, DNS:*.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk Algoritmo de assinatura: sha256WithRSAEncryption 79:75:3c:81:ca:78:50:64:4b:4a:4c:67:9a:22:12:28:e6:76: a0:00:18:87:0f:09:bc:18:28:fb:5c:06:52:51:91:fe:2b:5f: 9c:a2:0f:96:67:ec:0d:44:fd:e4:7d:cc:90:f5:5f:8a:9f:e1: 56:c1:aa:67:fb:fe:8d:6d:fa:fb:04:36:c4:cf:b6:24:ce:4d: e8:87:d9:f0:40:b3:9b:7d:d1:a7:77:6a:1b:ea:11:67:46:14: 84:0b:37:0a:c1:35:b8:53:bd:98:58:3f:98:b5:20:d7:9c:0f: 99:eb:48:71:03:88:1b:8d:ef:b3:08:76:27:53:87:09:cd:4a: 5c:26:fc:bd:ad:82:e4:38:0b:6c:e1:8c:e8:61:8e:38:f5:c0: aa:7c:69:b1:2d:f3:5e:85:8c:0f:42:fc:19:b0:aa:17:81:44: 54:6e:8f:5d:d7:1f:f6:27:5c:fc:a3:78:de:45:e2:d3:3e:30: 14:53:65:fd:01:07:e8:af:b9:a7:fd:04:fb:ec:79:2c:1b:b9: d7:f2:d2:90:2c:6f:ac:ca:09:29:07:73:a3:88:c2:bc:d7:a6: 09:49:31:a6:5b:96:40:12:5e:6f:82:bd:32:7f:ba:dc:6c:ad: d2:ed:a8:70:42:99:4e:6c:8a:4f:43:c3:a3:a0:70:42:ea:23: e3:a5:61:60 |
O EasyRSA cria chaves privadas no formato moderno PKCS#7, mas o Couchbase Server suporta apenas o PKCS#1. Para remediar isso, precisamos converter os formatos.
1 |
openssl rsa -in pki/private/server.key -out server.key.der -outform DER |
1 |
openssl rsa -in server.key.der -inform DER -out server.key -outform PEM |
Agora que o TLS está configurado, colete seu certificado CA e o par certificado/chave privada do servidor, pois eles serão necessários ao configurar o cluster do Couchbase em uma etapa posterior.
Configuração de DDNS
Agora podemos começar a implantar alguns recursos reais do Kubernetes. Primeiro, vamos criar nosso namespace para que o controlador external-dns seja executado e uma conta de serviço para ser executada.
1 |
kubectl create namespace 6c3c0075-b44a-11e9-9518-4a8d7629c69a |
1 |
kubectl -n 6c3c0075-b44a-11e9-9518-4a8d7629c69a create serviceaccount external-dns |
É necessária uma função para conceder permissão ao controlador external-dns para interrogar os recursos do Kubernetes no namespace em que ele está sendo executado. A função está vinculada à conta de serviço com a qual o controlador external-dns será executado. Neste exemplo, usarei uma função de cluster para que ela possa ser compartilhada entre todas as instâncias do controlador external-dns. No entanto, ela será vinculada dentro do namespace, pois o controlador não precisa acessar todos os namespaces. Usuários do OpenShift: Você precisará de privilégios de administrador para a criação e vinculação de funções, pois elas exigem escalonamento de privilégios e, por motivos de segurança, não podem ser executadas por usuários normais. A função se parece com o seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Versão da API: rbac.authorization.k8s.io/v1 gentil: ClusterRole metadados: nome: external-dns regras: - apiGrupos: - "" recursos: - serviços - cápsulas - nós verbos: - obter - assistir - lista |
E é instalado com o seguinte:
1 |
kubectl create -f external-dns-cluster-role.yaml |
1 |
kubectl -n 6c3c0075-b44a-11e9-9518-4a8d7629c69a create rolebinding --clusterrole external-dns --serviceaccount 6c3c0075-b44a-11e9-9518-4a8d7629c69a:external-dns external-dns |
A etapa final é instalar o controlador external-dns. Nós o configuraremos para procurar serviços dentro do namespace. Se um serviço tiver uma anotação external-dns.alpha.kubernetes.io/hostname então o controlador external-dns criará registros DNS A no mapeamento do nosso provedor DDNS para o endereço IP do serviço.
É possível que várias instâncias do external-dns estejam sincronizando registros de DNS para o mesmo domínio. Se ele vir um registro que não corresponda a um serviço que esteja gerenciando, ele o excluirá. Para evitar que dois ou mais controladores adicionem continuamente seus próprios registros e excluam os de outros, adicionamos um GUID para que o controlador responda apenas aos registros que possui. Para sua curiosidade, a propriedade é gerenciada por meio de registros DNS TXT. O YAML de implementação é parecido com o seguinte. Você deve substituir sua própria chave de API do Cloudflare e endereço de e-mail nos parâmetros de ambiente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Versão da API: extensões/v1beta1 gentil: Implantação metadados: nome: external-dns especificação: seletor: matchLabels: aplicativo: external-dns modelo: metadados: rótulos: aplicativo: external-dns especificação: serviceAccountName: external-dns contêineres: - nome: external-dns imagem: registry.opensource.zalan.do/teapot/external-dns:mais recente argumentos: - --source=service - --domain-filter=spjmurray.co.Reino Unido - --provider=cloudflare - --txt-owner-id=6c3c0075-b44a-11e9-9518-4a8d7629c69a env: - nome: CF_API_KEY valor: REDACTED - nome: CF_API_EMAIL valor: REDACTED |
Isso pode ser criado com o seguinte:
1 |
kubectl -n 6c3c0075-b44a-11e9-9518-4a8d7629c69a create -f external-dns.yaml |
Verifique se a implantação está em execução e se estamos prontos para instalar o cluster do Couchbase.
Instalar o operador
Isso é abordado extensivamente no documentação oficial. Primeiro, você precisará instalar as definições de recursos personalizados. Em seguida, instale o controlador de admissão dinâmico em um namespace de sua escolha e conecte-o à API do Kubernetes.
O controlador de admissão é um componente obrigatório da implementação do Operator 1.2.0. Ele aplica valores padrão ao cluster e, o mais importante, faz a validação fora do escopo da validação do esquema JSON nativo. A validação mais importante que ele realiza para essa configuração é garantir que o DNS e o TLS estejam configurados corretamente na definição do cluster do Couchbase.
O Operator é instalado no mesmo namespace que o controlador external-dns usando um processo muito semelhante ao do controlador external-dns.
Cluster público do Couchbase
A etapa final é, na verdade, a mais fácil. Aqui está a definição YAML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Versão da API: couchbase.com/v1 gentil: CouchbaseCluster metadados: nome: couchbase especificação: authSecret: 6c3c0075-b44a-11e9-9518-4a8d7629c69a imagem de base: couchbase/servidor versão: enterprise-6.0.1 exposeAdminConsole: verdadeiro adminConsoleServiceType: Balanceador de carga adminConsoleServices: - dados exposedFeatureServiceType: Balanceador de carga exposedFeatures: - xdcr - cliente dns: domínio: 6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk tls: estático: operatorSecret: couchbase-ca membro: serverSecret: couchbase-cert servidores: - nome: padrão serviços: - dados - índice - consulta tamanho: 3 |
O console de administração e os recursos expostos (por serviços de pod) são expostos com novos parâmetros que permitem que o tipo de serviço seja especificado. Nesta ocasião, estou executando no GKE. Quando um Balanceador de carga é criado, ele recebe um endereço IP público associado a ele.
A nova configuração de DNS, quando especificada, anotará o console de administração e os serviços por pod com os rótulos compreendidos pelo controlador de DNS externo. Para a configuração do console administrativo, isso é console.${metadata.name}.${spec.dns.domain} por exemplo.
Por fim, como estamos usando conectividade pública e DNS, o controlador de admissão dinâmica nos forçará a usar TLS. Os parâmetros do TLS são repleto de segredos contendo os certificados TLS que criamos anteriormente para esse cluster.
Crie o cluster e observe os registros de status ou do Operador para verificar a conclusão. Eventualmente, você deverá conseguir se conectar ao console com a url https://console.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk:18091/ à medida que os IPs do balanceador de carga são alocados e os registros DNS são adicionados. Você pode usar esse mesmo endereço para estabelecer clusters remotos do XDCR e inicializar SDKs de clientes do Couchbase. Parabéns, você ativou a conectividade pública!
Solução de problemas
A simples explicação de como configurar a conectividade pública é metade do trabalho. Você precisa ser capaz de determinar onde está o problema antes de levantar casos de suporte. Como a culpa é sempre da rede (na maioria das vezes), aqui estão algumas dicas para ajudá-lo.
O DNS não é instantâneo, leva tempo para que os registros apareçam e leva tempo para que as modificações se propaguem à medida que os TTLs expiram. Para verificar se o DNS está de acordo com o esperado, primeiro procure os nomes de DNS esperados. Encontre os nomes dos serviços:
1 2 3 4 5 6 7 8 |
kubectl -n 6c3c0075-b44a-11e9-9518-4a8d7629c69a get svc NOME TIPO CLUSTER-IP EXTERNAL-IP PORTA(S) IDADE couchbase ClusterIP Nenhum 8091/TCP,18091/TCP 26h couchbase-0000-exposed-ports LoadBalancer 10.40.8.108 34.66.243.123 18091:32281/TCP,18092:32677/TCP,11207:31661/TCP,18093:32233/TCP 26h couchbase-0001-exposed-ports LoadBalancer 10.40.6.37 35.232.231.230 18091:32171/TCP,18092:31995/TCP,11207:30711/TCP,18093:31243/TCP 26h couchbase-0002-exposed-ports LoadBalancer 10.40.4.46 35.238.213.211 18091:32117/TCP,18092:30313/TCP,11207:32609/TCP,18093:32433/TCP 26h couchbase-srv ClusterIP Nenhum 11210/TCP,11207/TCP 26h couchbase-ui LoadBalancer 10.40.13.78 35.238.226.107 18091:32508/TCP 26h |
Procure o nome DNS calculado:
1 2 |
kubectl -n 6c3c0075-b44a-11e9-9518-4a8d7629c69a get svc couchbase-0000-exposed-ports -o yaml | grep external-dns.alpha.kubernetes.io/hostname external-dns.alpha.kubernetes.io/hostname: couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk |
O registro A do DNS existe? O endereço IP corresponde ao endereço IP público do serviço?
1 2 |
dig +short couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk 34.66.243.123 |
Em seguida, você precisa ter certeza de que as portas solicitadas estão escutando. Podemos verificar se a porta Admin habilitada para TLS está escutando e podemos estabelecer uma sessão TCP nessa porta:
1 2 |
nc -vz couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk 18091 A conexão com couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk 18091 porta [tcp/*] foi bem-sucedida! |
A última coisa a fazer é determinar se o TLS está funcionando como esperado usando o certificado CA:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
openssl s_client -host couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk -port 18091 -CAfile ca.crt CONNECTED(00000005) depth=1 CN = CA do Couchbase verificar retorno:1 profundidade=0 CN = servidor Couchbase verificar retorno:1 --- Cadeia de certificados 0 s:CN = Servidor Couchbase i:CN = CA do Couchbase 1 s:CN = CA do Couchbase i:CN = CA do Couchbase --- Certificado do servidor -----BEGIN CERTIFICATE----- MIIDuDCCAqCgAwIBAgIRALiiq3Qsioi/Zz+o05v9CRkwDQYJKoZIhvcNAQELBQAw FzEVMBMGA1UEAxMMQ291Y2hiYXNlIENBMB4XDTE5MDgwMTEwNTIxNVoXDTI5MDcy OTEwNTIxNVowGzEZMBcGA1UEAxMQQ291Y2hiYXNlIFNlcnZlcjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBALiFtUEWZx95Mkzt4UTMVWXbodGZbtHXkKZe 60yW3qRw3XRsdhN1AV42ol/wi83oi71oKvJc6Dx4bXGS2yxYfOdApXPMzfS3yGkW 08UVGMBW2bP2hsYiiwUid8dczio9uOiW6sgXqDone5RmoYCJooslW+1yrNUpN6Hl 3Z8WrKQEFNiJzNAI+fFYH6f67i0a5b0DuueaefcQ1w+bvPnMyQOXWHifaHi3IM9e qGd7M0GRSox8RBolhsoV65olXoAjZZt6QORVwZyTyNZy59jXrN35kqiJwbz/Gn2l 6atruD7EX7bmMEVctFrO+tkSKK3mOXs5Sy6iKhb4ZDZ1fVl4Qc8CAwEAAaOB+jCB 9zAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/ BAIwADAdBgNVHQ4EFgQUuH2E6a7fOJC0tcyC6rU40jUSTD8wHwYDVR0jBBgwFoAU eEk1m7QDJoG0WmiMlBjOKloS/u4wgYEGA1UdEQR6MHiCNCouY291Y2hiYXNlLjZj M2MwMDc1LWI0NGEtMTFlOS05NTE4LTRhOGQ3NjI5YzY5YS5zdmOCQCouY291Y2hi YXNlLjZjM2MwMDc1LWI0NGEtMTFlOS05NTE4LTRhOGQ3NjI5YzY5YS5zcGptdXJy YXkuY28udWswDQYJKoZIhvcNAQELBQADggEBAHl1PIHKeFBkS0pMZ5oiEijmdqAA GIcPCbwYKPtcBlJRkf4rX5yiD5Zn7A1E/eR9zJD1X4qf4VbBqmf7/o1t+vsENsTP tiTOTeiH2fBAs5t90ad3ahvqEWdGFIQLNwrBNbhTvZhYP5i1INecD5nrSHEDiBuN 77MIdidThwnNSlwm/L2tguQ4C2zhjOhhjjj1wKp8abEt816FjA9C/BmwqheBRFRu j13XH/YnXPyjeN5F4tM+MBRTZf0BB+ivuaf9BPvseSwbudfy0pAsb6zKCSkHc6OI wrzXpglJMaZblkASXm+CvTJ/utxsrdLtqHBCmU5sik9Dw6OgcELqI+OlYWA= -----END CERTIFICATE----- subject=CN = Servidor Couchbase issuer=CN = CA do Couchbase --- Nenhum nome de CA de certificado de cliente foi enviado Digest de assinatura de pares: SHA256 Tipo de assinatura de par: RSA Chave temporária do servidor: DH, 2048 bits --- O handshake SSL leu 2714 bytes e escreveu 737 bytes Verificação: OK --- Novo, TLSv1.2, a cifra é DHE-RSA-AES256-SHA256 A chave pública do servidor é de 2048 bits A renegociação segura é suportada Compressão: NENHUMA Expansão: NENHUMA Nenhum ALPN negociado SSL-Session: Protocolo: TLSv1.2 Cifra: DHE-RSA-AES256-SHA256 Session-ID: 1D4242B756A51A14F1CA360DD7BB2DB74CEB4897E3365576658D2E5A7C7B36A0 Session-ID-ctx: Master-Key: 11D43F8E21FD57A07D091913A892D1BBEC32A701491FCE0EAA1EAEA68084F3754CA746921F9E80FBA3EDB4F809A791A7 Identidade PSK: Nenhum Dica de identidade PSK: Nenhuma Nome de usuário do SRP: Nenhum Horário de início: 1564751720 Tempo limite: 7200 (seg) Verificar o código de retorno: 0 (ok) Segredo mestre estendido: não --- |
Além disso, para os mais corajosos, você pode verificar se os endereços DNS passados para os clientes estão corretos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
curl -s https://couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk:18091/pools/default/nodeServices -u Administrator:BIH6mSJQ33jcIb24LZagxn0GHpxsJEWiiXSHNnyoXxp2GITJWMgc4aEOxVVllcCR --cacert ca.crt | python -m json.tool { "nodesExt": [ { "alternateAddresses": { "external": { "hostname": "couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk" } }, "hostname": "couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.svc", "services": { "capi": 8092, "capiSSL": 18092, "indexAdmin": 9100, "indexHttp": 9102, "indexHttps": 19102, "indexScan": 9101, "indexStreamCatchup": 9104, "indexStreamInit": 9103, "indexStreamMaint": 9105, "kv": 11210, "kvSSL": 11207, "mgmt": 8091, "mgmtSSL": 18091, "moxi": 11211, "n1ql": 8093, "n1qlSSL": 18093, "projetor": 9999 }, "thisNode": true }, |
Próximas etapas
O Couchbase Autonomous Operator 1.2.0 é uma grande versão com muitos recursos novos. Os principais focos são a capacidade de atualização e a facilidade de uso. Esperamos que você goste de fazer coisas novas e legais com ele tanto quanto nós gostamos de criá-lo. Como sempre, seu feedback é fundamental!
- Experimente: https://www.couchbase.com/downloads
- Fóruns de suporte: https://www.couchbase.com/forums/c/couchbase-server/Kubernetes
- Documentação: https://docs.couchbase.com/operator/1.2/whats-new.html
Leia mais
- Operador Autônomo 1.2.0 Rede: https://www.couchbase.com/blog/autonomous-operator-1-2-0-networking
Excelente recurso. Mas só posso definir um valor para
exposedFeatures
Caso contrário, receberei um erro:spec.exposedFeatures no corpo deve ser um dos [admin xdcr client]
E outra pergunta: não consigo encontrar o código-fonte do operador. O operador será de código aberto?