En mi artículo anterior Discutí -desde un alto nivel- la nueva característica de Conectividad Pública en el Operador Autónomo 1.2.0. Esto fue intencionalmente una visión general abstracta con el fin de persuadir al usuario a aprender acerca de las alegrías de DDNS, TLS y redes de capa 3.
Dale un pez a un hombre y lo alimentarás durante un día. Enséñale a pescar y le darás de comer toda la vida.
Esperemos que todos hayáis invertido tiempo en aprender a pescar (o al menos os hayáis mojado los pies). (o al menos listos para mojarse los pies.) Este artículo ofrece un tutorial práctico sobre la configuración del Operator para poder exponer tus clusters de Couchbase de forma segura en la internet pública.
¿Por qué utilizar esta función?
Las nuevas empresas tecnológicas se centran más en la nube que las empresas tradicionales. Algunos argumentarían que la empresa tradicional está atrincherada, protegiendo los datos tras cortafuegos en centros de datos privados, y podría decirse que, desde el punto de vista de la seguridad, es lo correcto.
El aumento de la exposición a la nube, aunque es un riesgo mayor, también se está convirtiendo en una preocupación menor a medida que pasa el tiempo. Lo más importante es que la nube abre innumerables puertas a la agilidad y la innovación. Conectar las ofertas de servicios públicos a través de la Internet pública es un beneficio enorme, que no puede lograrse fácil y económicamente con servicios que viven en las instalaciones, ocultos detrás de los límites de NAT.
Un ejemplo que personalmente me gusta mucho es el auge de las funciones como servicio (FaaS). Las funciones son trabajos de corta duración (normalmente basados en contenedores) que responden a estímulos y devuelven un resultado. Se crean bajo demanda y se escalan horizontalmente de forma automática e instantánea para gestionar la carga de trabajo requerida. Puede utilizar ofertas públicas de servicios FaaS hoy mismo, sin perder tiempo instalando y configurando infraestructura virtual o física. AWS Lambda es una encarnación de este tipo con la que puede estar familiarizado.
A menos que su función sea pura (en el sentido de que sólo procesa datos), necesitará entradas, normalmente en forma de base de datos. Estas ofertas FaaS, dado que operan en la Internet pública, también requerirán una conexión a una base de datos pública. Establecer túneles VPN privados entre estos servicios puede ser difícil o imposible.
Por estas razones -interconectividad, sencillez y agilidad- ofrecemos la opción de conectividad pública.
Seguridad, seguridad, seguridad
Un servicio puesto a disposición del público en Internet se enfrentará al escrutinio de terceros malintencionados. Internet está plagado de intentos de obtener y explotar información personal. Como prueba sencilla, conecte un sistema UNIX a Internet. Sus registros SSH se llenarán rápidamente de intentos de acceso a la máquina utilizando diccionarios de nombres de usuario y contraseñas comunes o robados. Los cortafuegos mostrarán intentos de escanear puertos abiertos. Esto es lo normal, y lo ha sido desde que tengo uso de razón.
Las bases de datos, en particular, son tarros de miel para los delincuentes que intentan explotar los sistemas con el fin de acceder a listas de correo para ataques de phishing, o extraer datos de tarjetas de crédito para fraudes y robos de identidad. Hay que proteger estos servicios.
La función de conectividad pública del operador obliga a utilizar un cifrado completo de extremo a extremo. Esto impide que los fisgones vean información confidencial mientras están en redes públicas. Los certificados digitales crean un vínculo de confianza entre clientes y servidores. Un cliente verificará que un servidor es válido para el nombre de host al que intentó conectarse y que está firmado por una autoridad de certificación de confianza.
El Operador sólo permite el uso de cadenas de certificados de servidor, y no actúa como autoridad de certificación, firmando certificados de servidor para servidores individuales a medida que cambia la topología. Actuar como CA permitiría crear y firmar cualquier certificado, por lo que optamos por el enfoque seguro. Como resultado, admitimos un certificado comodín para el clúster en su conjunto. Al utilizar certificados comodín también necesitamos utilizar DNS público para que el cliente pueda confirmar que el certificado del servidor es válido para el host con el que se está contactando.
Estos antecedentes nos proporcionan conocimientos suficientes para empezar a desplegar nuestra base de datos con conectividad pública.
Empecemos
DNS
Como ya hemos comentado, necesitamos usar DNS públicos para contactar con los nodos del cluster Couchbase cuando usamos conectividad pública. Estos se pueden comprar relativamente barato en línea de los registradores, tales como Gandi, GoDaddy, Namecheap etc.
También necesitamos poder utilizar DNS dinámicos. A medida que se añaden y eliminan nodos de nuestro clúster Couchbase, necesitamos que se añadan y eliminen las entradas correspondientes del DNS. También necesitan ser actualizadas si las direcciones IP públicas de estos nodos cambian. Esto es debido al alto rendimiento, la fragmentación del lado del cliente utilizada por los clientes Couchbase y XDCR. Utilizaremos el Kubernetes external-dns para realizar actualizaciones DDNS. El enlace enumera los proveedores de DDNS compatibles. Una vez que haya comprado un dominio DNS, tendrá que delegar sus servidores de nombres al proveedor DDNS que haya elegido. Mi elección personal para este ejemplo es Cloudflare. El paso final de preparación es la creación de una clave API u otras credenciales para que el controlador external-dns se autentique con el proveedor DDNS y controle los registros DNS requeridos por el cluster Couchbase.
TLS
Para la mayoría de la gente esta es la parte más mística del proceso. Las páginas web HTTPS simplemente funcionan de forma transparente, por lo que hay poca necesidad de preocuparse de esto en el día a día por parte del usuario medio. No voy a entrar en detalles (ya que eso es para otro post), pero lo que tenemos que discutir son las principales cosas que necesitan estar vinculados a su configuración de DNS elegido.
Utilizo mi dominio DNS personal, spjmurray.espara esta demostración. Instalaré mi clúster Couchbase en su propio espacio de nombres llamado 6c3c0075-b44a-11e9-9518-4a8d7629c69ay el clúster se llamará couchbase. Es importante conocer estos parámetros porque nos permiten direccionar de forma única un clúster Couchbase dentro de nuestro clúster Kubernetes. El clúster Couchbase se configurará para que su dominio sea couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk. El operador requerirá la creación de registros A dentro de este dominio para cada nodo, así como la Consola Web de Couchbase.
Conociendo nuestro dominio, ahora podemos determinar el nombre alternativo del sujeto del certificado comodín DNS *.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk.
La herramienta EasyRSA de OpenVPN es un método sencillo para generar certificados. Primero, clona el repositorio e inicialízalo.
1 |
git clone https://github.com/OpenVPN/easy-rsa |
1 |
cd easy-rsa/easyrsa3 |
1 |
./easyrsa init-pki |
Generar el certificado de CA y el par de claves. Si recuerdas, la clave privada de la CA se utiliza para firmar digitalmente un certificado de servidor. Un cliente puede entonces verificar que el certificado del servidor es auténtico con la clave pública de la CA. Este comando le pedirá un nombre de CA y una contraseña. Una vez completado, el certificado de la CA se puede encontrar en pki/ca.crt.
1 |
./easy-rsa build-ca |
El certificado del servidor y el par de claves se crean a continuación. Cuando se especifica TLS en la configuración del cluster de Couchbase, el Operador utilizará TLS para comunicarse con el cluster. Esto evita que cualquier contraseña o datos sensibles sean transmitidos en texto plano. Para soportar los nombres DNS privados de Kubernetes necesitamos otro nombre alternativo de sujeto comodín DNS. El nopass para que la clave privada no esté encriptada y pueda ser leída por el servidor Couchbase. El siguiente comando solicitará una contraseña; esta es la contraseña de la clave privada de la CA utilizada para firmar digitalmente el 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 |
Puede comprobar que el certificado es el esperado examinándolo en 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: Datos: Versión: 3 (0x2) Número de serie: b8:a2:ab:74:2c:8a:88:bf:67:3f:a8:d3:9b:fd:09:19 Algoritmo de firma: sha256WithRSAEncryption Emisor: CN = Couchbase CA Validez No antes de: Aug 1 10:52:15 2019 GMT No después de : Jul 29 10:52:15 2029 GMT Asunto: CN = Couchbase Server Información de la clave pública del sujeto: Algoritmo de clave pública: rsaEncryption Clave 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 Exponente: 65537 (0x10001) Extensiones X509v3: Uso de la clave X509v3: crítico Firma digital, cifrado de claves Uso de claves ampliadas X509v3: Autenticación TLS del servidor web Restricciones básicas X509v3: critical CA:FALSO Identificador de clave de asunto X509v3: B8:7D:84:E9:AE:DF:38:90:B4:B5:CC:82:EA:B5:38:D2:35:12:4C:3F Identificador de clave de autoridad X509v3: keyid:78:49:35:9B:B4:03:26:81:B4:5A:68:8C:94:18:CE:2A:5A:12:FE:EE Nombre alternativo del asunto X509v3: DNS:*.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.svc, DNS:*.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk Algoritmo de firma: 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 |
EasyRSA crea claves privadas en el moderno formato PKCS#7, sin embargo Couchbase Server sólo soporta PKCS#1. Para remediar esto necesitamos convertir los formatos.
1 |
openssl rsa -in pki/private/server.key -out server.key.der -outform DER |
1 |
openssl rsa -in servidor.clave.der -inform DER -out servidor.clave -outform PEM |
Ahora que TLS está configurado, recoge tu certificado CA y el par certificado/clave privada del servidor, ya que serán necesarios cuando configures tu cluster Couchbase en un paso posterior.
Configuración DDNS
Ahora podemos empezar a desplegar algunos recursos reales de Kubernetes. En primer lugar, vamos a crear nuestro espacio de nombres para el controlador externo-dns para ejecutar y una cuenta de servicio para ejecutar como.
1 |
kubectl create namespace 6c3c0075-b44a-11e9-9518-4a8d7629c69a |
1 |
kubectl -n 6c3c0075-b44a-11e9-9518-4a8d7629c69a create serviceaccount external-dns |
Se requiere un rol para otorgar permiso al controlador external-dns para interrogar los recursos de Kubernetes en el espacio de nombres en el que se está ejecutando. La función está vinculada a la cuenta de servicio que el controlador externo-dns se ejecutará como. Utilizaré un rol de clúster en este ejemplo para que pueda ser compartido entre todas las instancias del controlador de DNS externo. Sin embargo, se vinculará dentro del espacio de nombres, ya que el controlador no necesita acceder a todos los espacios de nombres. Usuarios de OpenShift: Necesitará privilegios de administrador para la creación y vinculación de roles, ya que requieren escalado de privilegios y, por motivos de seguridad, no pueden ser realizados por usuarios normales. El rol tiene el siguiente aspecto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
apiVersion: rbac.authorization.k8s.io/v1 amable: ClusterRole metadatos: nombre: external-dns normas: - apiGrupos: - "" recursos: - servicios - vainas - nodos verbos: - consiga - ver - lista |
Y se instala con lo siguiente:
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 |
El último paso es instalar el controlador external-dns. Lo configuraremos para que busque servicios dentro del espacio de nombres. Si un servicio tiene una anotación external-dns.alpha.kubernetes.io/hostname entonces el controlador external-dns creará registros DNS A en nuestro proveedor DDNS mapeando a la dirección IP del servicio.
Es posible que varias instancias de external-dns estén sincronizando registros DNS para el mismo dominio. Si ve un registro que no corresponde a un servicio que está gestionando, lo borrará. Para evitar que dos o más controladores estén continuamente añadiendo registros propios y borrando registros ajenos, añadimos un GUID para que el controlador sólo responda a los registros de su propiedad. Para tu curiosidad, la propiedad se gestiona a través de registros DNS TXT. El YAML de despliegue tiene el siguiente aspecto. Debe sustituir su propia clave API de Cloudflare y dirección de correo electrónico en los parámetros de entorno.
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 |
apiVersion: extensions/v1beta1 amable: Despliegue metadatos: nombre: external-dns spec: selector: matchLabels: aplicación: external-dns plantilla: metadatos: etiquetas: aplicación: external-dns spec: serviceAccountName: external-dns contenedores: - nombre: external-dns imagen: registry.opensource.zalan.do/teapot/external-dns:latest args: - --fuente=servicio - --domain-filter=spjmurray.co.uk - --provider=cloudflare - --txt-owner-id=6c3c0075-b44a-11e9-9518-4a8d7629c69a env: - nombre: CF_API_KEY valor: REDACTED - nombre: CF_API_EMAIL valor: REDACTED |
Esto se puede crear con lo siguiente:
1 |
kubectl -n 6c3c0075-b44a-11e9-9518-4a8d7629c69a create -f external-dns.yaml |
Comprueba que el despliegue se está ejecutando y estamos listos para instalar nuestro clúster Couchbase.
Instalar el operador
Este tema se trata ampliamente en el documentación oficial. En primer lugar, deberá instalar las definiciones de recursos personalizadas. A continuación, instale el controlador de admisión dinámico en un espacio de nombres de su elección y conéctelo a la API de Kubernetes.
El controlador de admisión es un componente obligatorio del despliegue de Operator 1.2.0. Aplica valores por defecto al cluster, y lo más importante, realiza validaciones fuera del alcance de la validación nativa del esquema JSON. La validación más importante que realiza para esta configuración es asegurar que tus DNS y TLS están configurados correctamente en la definición de tu cluster Couchbase.
El Operador se instala en el mismo espacio de nombres que el controlador external-dns mediante un proceso muy similar al del controlador external-dns.
Clúster Couchbase público
El último paso es en realidad el más sencillo. Aquí está la definición 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 |
apiVersion: couchbase.com/v1 amable: CouchbaseCluster metadatos: nombre: couchbase spec: authSecret: 6c3c0075-b44a-11e9-9518-4a8d7629c69a baseImage: couchbase/servidor versión: enterprise-6.0.1 exposeAdminConsoleVerdadero adminConsoleServiceType: LoadBalancer adminConsoleServices: - datos exposedFeatureServiceType: LoadBalancer características expuestas: - xdcr - cliente dns: dominio: 6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk tls: estático: operatorSecret: couchbase-ca miembro: serverSecret: couchbase-cert servidores: - nombre: por defecto servicios: - datos - índice - consulta talla: 3 |
La consola de administración y las funcionalidades expuestas (por pod services) se exponen con nuevos parámetros que permiten especificar el tipo de servicio. En esta ocasión estoy ejecutando en GKE. Cuando un LoadBalancer se le asocia una dirección IP pública.
La nueva configuración DNS, cuando se especifique, anotará la consola de administración y los servicios per-pod con las etiquetas entendidas por el controlador DNS externo. Para la configuración de la consola de administración es console.${metadata.name}.${spec.dns.domain} por ejemplo.
Por último, como estamos utilizando conectividad pública y DNS, el controlador de admisión dinámico nos obligará a utilizar TLS. Los parámetros TLS son poblada de secretos que contiene los certificados TLS que creamos anteriormente para este clúster.
Crea el cluster y observa los logs de estado u Operator para ver si se ha completado. Eventualmente deberías poder conectarte a la consola con la url https://console.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk:18091/ a medida que se asignan las IPs del balanceador de carga y se añaden los registros DNS. Puedes usar esta misma dirección para establecer clusters remotos XDCR y arrancar SDKs de cliente Couchbase. Enhorabuena, ¡has habilitado la conectividad pública!
Solución de problemas
Explicar simplemente cómo configurar la conectividad pública es la mitad del trabajo. Tienes que ser capaz de determinar dónde está el problema antes de plantear casos de asistencia. Dado que siempre es culpa de la red (bueno, casi siempre), aquí tienes algunos consejos que te ayudarán.
El DNS no es instantáneo, los registros tardan en aparecer y las modificaciones tardan en propagarse a medida que expiran los TTL. Para comprobar que el DNS es el esperado, primero busca los nombres DNS esperados. Busca los nombres de servicio:
1 2 3 4 5 6 7 8 |
kubectl -n 6c3c0075-b44a-11e9-9518-4a8d7629c69a get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE couchbase ClusterIP Ninguno 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 Ninguno 11210/TCP,11207/TCP 26h couchbase-ui LoadBalancer 10.40.13.78 35.238.226.107 18091:32508/TCP 26h |
Busque el nombre 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 |
¿Existe el registro DNS A? ¿Corresponde la dirección IP a la dirección IP pública del servicio?
1 2 |
dig +short couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk 34.66.243.123 |
A continuación hay que asegurarse de que los puertos solicitados están a la escucha. Podemos comprobar que el puerto Admin habilitado para TLS está escuchando y podemos establecer una sesión TCP en ese puerto:
1 2 |
nc -vz couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk 18091 Conexión a couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk 18091 puerto [tcp/*] ¡con éxito! |
Lo último que hay que hacer es establecer si TLS funciona como se espera utilizando el 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 CONECTADO(00000005) depth=1 CN = Couchbase CA verificar retorno:1 depth=0 CN = Couchbase Server verificar retorno:1 --- Cadena de certificados 0 s:CN = Servidor Couchbase i:CN = CA de Couchbase 1 s:CN = CA de Couchbase i:CN = CA de Couchbase --- Certificado del servidor -----EMPEZAR CERTIFICADO----- 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 CERTIFICADO----- subject=CN = Servidor Couchbase issuer=CN = Couchbase CA --- No se envían nombres de CA de certificados de cliente Resumen de firma de pares: SHA256 Tipo de firma par: RSA Clave temporal del servidor: DH, 2048 bits --- SSL handshake ha leído 2714 bytes y escrito 737 bytes Verificación: OK --- Nuevo, TLSv1.2, Cifrado es DHE-RSA-AES256-SHA256 La clave pública del servidor es de 2048 bits Se admite la renegociación segura Compresión: NINGUNA Expansión: NINGUNA No se negocia ALPN Sesión SSL: Protocolo : TLSv1.2 Cifrado : DHE-RSA-AES256-SHA256 Session-ID: 1D4242B756A51A14F1CA360DD7BB2DB74CEB4897E3365576658D2E5A7C7B36A0 Sesión-ID-ctx: Master-Key: 11D43F8E21FD57A07D091913A892D1BBEC32A701491FCE0EAA1EAEA68084F3754CA746921F9E80FBA3EDB4F809A791A7 Identidad PSK: Ninguna Pista de identidad PSK: Ninguna Nombre de usuario SRP: Ninguno Hora de inicio: 1564751720 Tiempo de espera : 7200 (seg) Verificar código de retorno: 0 (ok) Secreto maestro ampliado: no --- |
Además, para los especialmente valientes, puedes comprobar que las direcciones DNS pasadas a los clientes son correctas:
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 Administrador:BIH6mSJQ33jcIb24LZagxn0GHpxsJEWiiXSHNnyoXxp2GITJWMgc4aEOxVllcCR --cacert ca.crt | python -m json.tool { "nodosExt": [ { "alternateAddresses": { "externo": { "hostname": "couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk" } }, "hostname": "couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.svc", "servicios": { "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, "proyector": 9999 }, "thisNode": true }, |
Próximos pasos
Couchbase Autonomous Operator 1.2.0 es un gran lanzamiento con muchas nuevas características. Los focos principales son la capacidad de actualización y la facilidad de uso. Esperamos que disfrutes haciendo cosas nuevas con él tanto como nosotros hemos disfrutado creándolo. Como siempre, ¡sus comentarios son clave!
- Pruébalo: https://www.couchbase.com/downloads
- Foros de apoyo: https://www.couchbase.com/forums/c/couchbase-server/Kubernetes
- Documentación: https://docs.couchbase.com/operator/1.2/whats-new.html
Seguir leyendo
- Operador autónomo 1.2.0 Trabajo en red: https://www.couchbase.com/blog/autonomous-operator-1-2-0-networking
Gran función. Pero sólo puedo establecer un valor en
características expuestas
De lo contrario, se producirá un error:spec.exposedFeatures en el cuerpo debe ser uno de [admin xdcr client]
Y otra pregunta, no encuentro el código fuente del operador. ¿Será el operador de código abierto?