{"id":8094,"date":"2020-01-24T08:26:13","date_gmt":"2020-01-24T16:26:13","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=8094"},"modified":"2025-06-13T19:40:22","modified_gmt":"2025-06-14T02:40:22","slug":"asp-net-core-kubernetes-tutorial-aks","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/asp-net-core-kubernetes-tutorial-aks\/","title":{"rendered":"Tutorial de ASP.NET Core Kubernetes para AKS"},"content":{"rendered":"<div class=\"paragraph\">\n<p>ASP.NET Core Kubernetes tutorial ser\u00e1 cubierto en esta entrada del blog, como un seguimiento de <a href=\"https:\/\/www.couchbase.com\/blog\/es\/asp-net-core-microservices-getting-started\/\">ASP.NET Core Microservicios: Primeros pasos<\/a>.<\/p>\n<\/div>\n<blockquote class=\"twitter-tweet\" data-width=\"550\" data-dnt=\"true\">\n<p lang=\"en\" dir=\"ltr\">Acabo de ver esto y me ha hecho re\u00edr MUCHO M\u00c1S de lo que deber\u00eda. <a href=\"https:\/\/t.co\/R1wleGZM0B\">pic.twitter.com\/R1wleGZM0B<\/a><\/p>\n<p>- Carmen Crincoli - @crincoli.org (@CarmenCrincoli) <a href=\"https:\/\/twitter.com\/CarmenCrincoli\/status\/1158772188402475010?ref_src=twsrc%5Etfw\">6 de agosto de 2019<\/a><\/p><\/blockquote>\n<p><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n<div class=\"paragraph\">\n<p>En la entrada anterior, se cre\u00f3 un microservicio ASP.NET Core con Couchbase utilizando docker-compose para fines de desarrollo y despliegue local. Una vez listos para la producci\u00f3n, los servicios suelen desplegarse en servicios gestionados de Kubernetes como <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/\">AKS<\/a>, <a href=\"https:\/\/aws.amazon.com\/eks\/\">EKS<\/a>, <a href=\"https:\/\/cloud.google.com\/kubernetes-engine\/\">GKE<\/a>etc.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Este tutorial de ASP.NET Core Kubernetes contiene algunos pasos que son espec\u00edficos de Azure AKS, pero la mayor parte de este material se puede aplicar a cualquier cl\u00faster Kubernetes.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_asp_net_core_kubernetes_tutorial_overview\">ASP.NET Core Kubernetes Tutorial general<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>En este tutorial de ASP.NET Core Kubernetes, recorrer\u00e9 estos pasos:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Crea una imagen Docker y env\u00edala al hub Docker<\/li>\n<li>Crear un cl\u00faster AKS en Azure<\/li>\n<li>Despliegue de un microservicio ASP.NET Core en AKS<\/li>\n<li>Despliega Couchbase Server en \u00e9l usando un operador Kubernetes<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Adem\u00e1s, voy a cubrir algunos temas opcionales, pero muy \u00fatiles:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Uso de DNS SRV para permitir que el microservicio ASP.NET Core localice su base de datos<\/li>\n<li>Configuraci\u00f3n del reenv\u00edo de puertos con kubectl para obtener acceso por t\u00fanel a los pods AKS<\/li>\n<li>Visualizaci\u00f3n del panel de control de Kubernetes en AKS<\/li>\n<li>Configuraci\u00f3n de un servicio Load Balancer en Kubernetes para exponer el microservicio ASP.NET Core a Internet.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Requisitos previos para aprovechar al m\u00e1ximo este tutorial:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Docker instalado, algunos conocimientos b\u00e1sicos de Docker y Docker Hub<\/li>\n<li>Visual Studio instalado, aunque no es estrictamente necesario.<\/li>\n<li>Una cuenta Azure (si no tiene una, puede <a href=\"https:\/\/azure.microsoft.com\/en-us\/free\/\">reg\u00edstrate ahora y consigue $200 en cr\u00e9dito<\/a> de forma gratuita). Si desea utilizar EKS, GKE, etc, todav\u00eda se puede seguir a lo largo de este tutorial, pero tendr\u00e1 que sustituir algunos pasos por su cuenta.<\/li>\n<li>kubectl (para Kubernetes) instalado<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_build_docker_image\">Crear imagen Docker<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Los despliegues de Kubernetes utilizan im\u00e1genes de contenedores. Existen muchas opciones de registros de contenedores privados (como <a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/container-registry\/\">Registro de contenedores Azure<\/a>), pero para mantener las cosas simples para este tutorial, voy a utilizar viejo llano <a href=\"https:\/\/hub.docker.com\/\">Centro Docker<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En primer lugar, empezar\u00e9 por crear una imagen Docker a partir del microservicio ASP.NET Core que cre\u00e9 en la entrada anterior. Desde Visual Studio, esto es tan f\u00e1cil como hacer clic con el bot\u00f3n derecho en Dockerfile y seleccionar \"Build Docker Image\".<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/11\/12701-docker-build-visual-studio.png\" alt=\"ASP.NET Core Kubernetes tutorial: Visual Studio Build Docker Image\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Una vez construida la imagen, aparecer\u00e1 en tu repositorio local de im\u00e1genes Docker. Puedes ver este repositorio desde la l\u00ednea de comandos utilizando \"docker images\":<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-PowerShell\" data-lang=\"PowerShell\">PS C:\\Users\\mgroves&gt; docker images\r\nREPOSITORIO ETIQUETA IMAGEN ID CREADO TAMA\u00d1O\r\nmattgroves\/hellomicroservice latest b2387e47a826 hace 3 semanas 213MB\r\nhellomicroservice latest b2387e47a826 hace 3 semanas 213MB<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>El siguiente paso es <a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/push\/\">empujar esta imagen a Docker hub<\/a> (por favor, revise si usted no ha utilizado Docker Hub antes). Empuj\u00e9 mi imagen a Docker con el comando <code>docker push mattgroves\/hellomicroservice<\/code> comando. Lo m\u00e1s probable es que desee etiquetar sus im\u00e1genes con n\u00fameros de versi\u00f3n para asegurarse de que Kubernetes est\u00e1 tirando de la versi\u00f3n exacta que desea implementar.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si quieres saltarte este paso, puedes usar mi imagen Docker como ejemplo: <a href=\"https:\/\/hub.docker.com\/repository\/docker\/mattgroves\/hellomicroservice\">mattgroves\/hellomicroservice<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_write_yaml_files_for_deployment\">Escribir archivos YAML para el despliegue<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Ahora que has publicado una imagen Docker, podemos empezar a escribir los archivos YAML para un despliegue Kubernetes. Este tutorial no cubrir\u00e1 todo lo que hay que saber sobre Kubernetes, pero se\u00f1alar\u00e1 las secciones dignas de menci\u00f3n tanto como sea posible. Para este tutorial, habr\u00e1 tres archivos YAML en total creados para estar junto con los archivos YAML que se env\u00edan con el Operador Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Cada uno de estos archivos YAML corresponde a un recurso de Kubernetes. Kubernetes orquestar\u00e1 el cl\u00faster en funci\u00f3n de los recursos que cree en el cl\u00faster.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>El recurso ASP.NET Core Microservice y el recurso Couchbase Cluster dar\u00e1n lugar cada uno a uno o varios <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/pod\/\">\"vainas\"<\/a> que se est\u00e1n creando en el cl\u00faster Kubernetes. Otros tipos de recursos son <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/secret\/\">\"secretos\"<\/a> (para gestionar y almacenar informaci\u00f3n sensible) y <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/service\/\">\"servicios\"<\/a> (para exponer un conjunto de vainas), y muchos otros.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_asp_net_core_microservice\">ASP.NET Core Microservicio<\/h3>\n<div class=\"paragraph\">\n<p>Empecemos por crear un archivo YAML para el propio despliegue del microservicio ASP.NET Core:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-YAML\" data-lang=\"YAML\">apiVersion: apps\/v1beta1 # para versiones anteriores a 1.8.0 use apps\/v1beta1\r\ntipo: Despliegue\r\nmetadatos:\r\n  name: hello-microservice-app-deployment\r\nspec:\r\n  selector:\r\n    matchLabels:\r\n      app: hello-microservice-app\r\n  r\u00e9plicas: 1 # indica al despliegue que ejecute pods # que coincidan con la plantilla\r\n  plantilla: # crea pods utilizando la definici\u00f3n de pod de esta plantilla\r\n    metadatos:\r\n      labels:\r\n        app: hello-microservice-app\r\n    spec:\r\n      contenedores:\r\n      - nombre: hello-microservice-app\r\n        imagen: mattgroves\/hellomicroservice\r\n        imagePullPolicy: Siempre\r\n        puertos:\r\n        - containerPort: 80\r\n          nombre: servidor\r\n        env:\r\n        - nombre: Couchbase__Username\r\n          valorDe:\r\n            secretKeyRef:\r\n              nombre: cb-hellomicroservices-auth\r\n              clave: nombre_usuario\r\n        - nombre: Couchbase__Contrase\u00f1a\r\n          valueFrom:\r\n            secretKeyRef:\r\n              nombre: cb-hellomicroservices-auth\r\n              clave: contrase\u00f1a\r\n        - nombre: Couchbase__ConnectionString\r\n          valor: couchbase:\/\/cb-hellomicroservices-srv\r\n        recursos:\r\n          peticiones:\r\n            cpu: 100m\r\n            memoria: 128Mi\r\n          l\u00edmites:\r\n            cpu: 250m\r\n            memoria: 256Mi<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Notas sobre hello-microservice.yaml:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><code>r\u00e9plicas.spec<\/code>: Indica a Kubernetes cu\u00e1ntos pods de este servicio debe crear. Para empezar, 1 est\u00e1 bien, pero a medida que escale, necesitar\u00e1 m\u00e1s pods (y probablemente un LoadBalancer, que se tratar\u00e1 m\u00e1s adelante).<\/li>\n<li><code>spec.template.spec.containers.image<\/code>: Esto le dice a Kubernetes qu\u00e9 im\u00e1genes utilizar. En mi caso, mattgroves\/hellomicroservice es la que se construy\u00f3 anteriormente en este tutorial y se despleg\u00f3 en el hub de Docker.<\/li>\n<li><code>env<\/code>: Definen variables de entorno para cada contenedor. En lugar de codificar estas credenciales en la imagen, estoy pasando un nombre de usuario, contrase\u00f1a y ConnectionString al microservicio ASP.NET Core, al igual que se hizo en la entrada del blog anterior. M\u00e1s sobre Couchbase__ConnectionString y DNS SRV m\u00e1s adelante.<\/li>\n<li>Tambi\u00e9n puede utilizar \"service.namespace\" si el cl\u00faster Couchbase vive en otro espacio de nombres.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_couchbase_cluster\">Cl\u00faster Couchbase<\/h3>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, se muestra un archivo YAML para la base de datos, que utiliza el m\u00e9todo <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/cloud\/kubernetes\/\">Operador Couchbase Kubernetes<\/a>:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-YAML\" data-lang=\"YAML\">apiVersion: couchbase.com\/v1\r\ntipo: CouchbaseCluster\r\nmetadatos:\r\n  nombre: cb-hellomicroservices\r\nspec:\r\n  baseImage: couchbase\r\n  versi\u00f3n: 6.5.0-beta2\r\n  authSecret: cb-hellomicroservices-auth\r\n  exposeAdminConsole: true\r\n  adminConsoleServices:\r\n    - data\r\n  cluster:\r\n    dataServiceCuotaMemoria: 256\r\n    indexServiceCuota de memoria: 256\r\n    cuota de memoria del servicio de b\u00fasqueda 256\r\n    eventingServiceCuota de memoria: 256\r\n    analyticsServiceCuota de memoria: 1024\r\n    indexStorageSetting: plasma\r\n    autoFailoverTimeout: 30\r\n    autoFailoverMaxCount: 3\r\n    autoFailoverOnDataDiskIssues: true\r\n    autoFailoverOnDataDiskIssuesTimePeriod: 30\r\n    autoFailoverServerGroup: false\r\n  cubos:\r\n    - nombre: hellomicroservice\r\n      tipo: couchbase\r\n      cuota de memoria 256\r\n      r\u00e9plicas 0\r\n      ioPriority: alta\r\n      evictionPolicy: fullEviction\r\n      conflictResolution: seqno\r\n      enableFlush: false\r\n      enableIndexReplica: false\r\n  servidores:\r\n    - tama\u00f1o: 1\r\n      nombre: all_services\r\n      servicios:\r\n        - datos\r\n        - \u00edndice\r\n        - consulta<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Este archivo YAML por s\u00ed mismo no es suficiente para utilizar el Operador, pero la instalaci\u00f3n del Operador vendr\u00e1 m\u00e1s adelante en este tutorial. Ten en cuenta tambi\u00e9n que, aunque el patr\u00f3n Operator es una forma cada vez m\u00e1s com\u00fan y eficaz de gestionar software con estado en Kubernetes, el YAML variar\u00e1 en funci\u00f3n de la base de datos que est\u00e9s utilizando (es decir, este YAML solo funcionar\u00e1 para Couchbase Server).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Notas sobre couchbase-cluster.yaml:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><code>versi\u00f3n.spec<\/code>Esto especifica que imagen de contenedor Couchbase usar. Estoy usando la versi\u00f3n beta2. En el momento de escribir esto, el operador s\u00f3lo funciona con la versi\u00f3n Enterprise. Esto puede cambiar pronto.<\/li>\n<li><code>spec.cluster<\/code>, <code>cubos.spec<\/code>, <code>servidores.spec<\/code>: definen varias configuraciones para el cluster de Couchbase Server. Por favor <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/couchbase-cluster-config.html\">consulte la documentaci\u00f3n para obtener la lista completa<\/a> de ajustes. Este archivo de ejemplo s\u00f3lo cubre un pu\u00f1ado.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_couchbase_secrets\">Los \"secretos\" de Couchbase<\/h3>\n<div class=\"paragraph\">\n<p>Tambi\u00e9n he creado un recurso \"secreto\". Los secretos son donde la informaci\u00f3n de configuraci\u00f3n como credenciales, contrase\u00f1as, tokens de autorizaci\u00f3n, etc, se pueden almacenar y gestionar con la propia API de Kubernetes.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-YAML\" data-lang=\"YAML\">apiVersion: v1\r\ntipo: Secret\r\nmetadatos:\r\n  name: cb-hellomicroservices-auth\r\ntype: Opaco\r\ndatos:\r\n  nombre de usuario: QWRtaW5pc3RyYXRvcg== # Administrador\r\n  contrase\u00f1a: cGFzc3dvcmQ= # contrase\u00f1a<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Este secreto contiene las credenciales que quiero que use Couchbase (as\u00ed como el microservicio ASP.NET Core). Los valores est\u00e1n codificados en base64 (valores reales en los comentarios). Estas credenciales de ejemplo NO son suficientes para un despliegue real: por favor, c\u00e1mbialas por algo m\u00e1s dif\u00edcil de adivinar.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tenga en cuenta la <code>metadata.name<\/code> es \"cb-hellomicroservices-auth\". Consulta hello-microservice.yaml y couchbase-cluster.yaml para ver c\u00f3mo se hace referencia a estos secretos.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_dns_srv\">DNS SRV<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Vuelve a mirar hello-microservice.yaml. En <code>env<\/code>Observa el par nombre\/valor de \"Couchbase__ConnectionString\" y \"couchbase:\/\/cb-hellomicroservices-srv\". En lugar de dar a ASP.NET Core la direcci\u00f3n IP o URL de los nodos de Couchbase Server, estoy utilizando una cadena de conexi\u00f3n para dirigirlo a un <a href=\"https:\/\/support.dnsimple.com\/articles\/srv-record\/\">Entrada DNS SRV<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En un Cluster de Couchbase, los pods que ejecutan Couchbase tienen el potencial de cambiar sus nombres de forma regular. Por lo tanto, se recomienda utilizar DNS SRV para localizar el servicio Couchbase. Afortunadamente, el Operador Aut\u00f3nomo de Couchbase crea una entrada DNS SRV para nosotros autom\u00e1ticamente.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Pronto podremos verlo en el Dashboard de Kubernetes, pero mientras tanto, s\u00f3lo ten en cuenta que ser\u00e1 el nombre del Cluster de Couchbase m\u00e1s \"-srv\". As\u00ed que en nuestro caso, es \"cb-hellomicroservices-srv\".<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>He realizado un peque\u00f1o cambio en el microservicio ASP.NET Core desde la anterior entrada del blog: Ahora estoy usando el <a href=\"https:\/\/github.com\/couchbaselabs\/Couchbase.Extensions\/blob\/master\/docs\/dns-srv.md\">Couchbase.Extensions.DnsDiscovery<\/a> biblioteca.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Adem\u00e1s de a\u00f1adir esta librer\u00eda desde NuGet, y usar ConnectionString en lugar de Server en appsettings.json, el \u00fanico otro cambio que hay que hacer es <code>AddCouchbaseDnsDiscovery<\/code> dentro del <code>ConfigureServices<\/code> m\u00e9todo.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\" data-lang=\"C#\">services.AddCouchbase(Configuration.GetSection(\"Couchbase\"));\r\nservices.AddCouchbaseDnsDiscovery();<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>As\u00ed de f\u00e1cil. Para m\u00e1s informaci\u00f3n sobre DNS SRV, consulte <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/dns-pod-service\/#srv-records\">Registros SRV<\/a> en la documentaci\u00f3n de Kubernetes.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_deployment_to_aks\">Despliegue en AKS<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>En este punto, estamos listos para desplegar en AKS. Para revisar, aqu\u00ed est\u00e1n los ingredientes que tenemos hasta ahora:<\/p>\n<\/div>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li>Imagen Docker de ASP.NET Core en Docker Hub<\/li>\n<li>Archivo YAML para la implantaci\u00f3n de ASP.NET Core<\/li>\n<li>Archivo YAML para el despliegue de Couchbase Cluster<\/li>\n<li>Archivo YAML para los secretos de Couchbase (referenciado por 2 y 3)<\/li>\n<\/ol>\n<\/div>\n<div class=\"paragraph\">\n<p>Para desplegar en AKS, segu\u00ed el procedimiento <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/kubernetes-walkthrough\">Inicio r\u00e1pido: Despliegue de un cl\u00faster del servicio Azure Kubernetes mediante la CLI de Azure<\/a> en la documentaci\u00f3n de Microsoft. He aqu\u00ed un breve resumen de los pasos que segu\u00ed:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>(Si desea utilizar su l\u00ednea de comandos local, aseg\u00farese de que dispone de <a href=\"https:\/\/docs.microsoft.com\/en-us\/cli\/azure\/install-azure-cli?view=azure-cli-latest\">azure-cli<\/a> instalado. De lo contrario, puede utilizar la funci\u00f3n <a href=\"https:\/\/shell.azure.com\/\">Shell de Azure Cloud<\/a>).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En primer lugar, inicie sesi\u00f3n en Azure: <code>az login<\/code>. Se le pedir\u00e1 que introduzca sus credenciales en su navegador web.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Una vez que haya iniciado sesi\u00f3n, cree primero un \"grupo de recursos\". Este es un grupo de organizaci\u00f3n dentro de Azure. Especifica un centro de datos (yo us\u00e9 eastus).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>az group create --name helloMicroserviceGroup --location eastus<\/code><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, cree un cl\u00faster AKS utilizando el grupo de recursos que acaba de crear. Hay muchas opciones para esto. Para mantener este ejercicio relativamente barato y simple, eleg\u00ed crear 3 nodos usando el tama\u00f1o Standard_B2s VM. Para despliegues de producci\u00f3n de Couchbase, es probable que necesites\/quieras tama\u00f1os m\u00e1s potentes.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>az aks create --resource-group helloMicroserviceGroup --name helloMicroserviceAks --node-count 3 --node-vm-size Standard_B2s --enable-addons monitoring --generate-ssh-keys<\/code><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Este paso tardar\u00e1 alg\u00fan tiempo en ejecutarse. Azure tardar\u00e1 unos 10 minutos en configurar este cl\u00faster AKS de Kubernetes.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Una vez creado el cl\u00faster, utilice <code>obtener-credenciales<\/code> para que kubectl sepa qu\u00e9 cl\u00faster utilizar\u00e1.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>az aks get-credentials --resource-group helloMicroserviceGroup --name helloMicroserviceAks<\/code><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Llegados a este punto, es hora de <strong>crear<\/strong> algunos recursos de Kubernetes. Los seis primeros archivos YAML pueden descargarse en \"Kubernetes\" <a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\">couchbase.com\/descargas<\/a>.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-PowerShell\" data-lang=\"PowerShell\">kubectl create -f crd.yaml\r\nkubectl create -f admission.yaml\r\nkubectl create -f operador-rol.yaml\r\nkubectl create -f operador-servicio-cuenta.yaml\r\nkubectl create -f operador-role-binding.yaml\r\nkubectl create -f operador-despliegue.yaml<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, utilice los tres archivos YAML que se crearon en este tutorial:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-PowerShell\" data-lang=\"PowerShell\">kubectl create -f secreto.yaml\r\nkubectl create -f couchbase-cluster.yaml\r\nkubectl create -f hola-microservicio.yaml<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Para ver el estado de sus pods Kubernetes, utilice <code>kubectl get pods<\/code>. Los pods de Couchbase tardar\u00e1n unos minutos en estar listos.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_port_forwarding\">Reenv\u00edo de puertos<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>En la implementaci\u00f3n anterior, ninguna de las implementaciones de Kubernetes est\u00e1 realmente expuesta fuera de Kubernetes. Una forma de asegurarnos de que el microservicio funciona es utilizar la funci\u00f3n <code>kubectl port-forward<\/code> comando. Esto crear\u00e1 un \"t\u00fanel\" localhost al pod dado.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Por ejemplo, creemos un t\u00fanel desde el puerto localhost 5000 al microservicio ASP.NET Core que se ejecuta en el puerto 80:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>kubectl port-forward  5000:80<\/code><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En este punto, puede acceder al microservicio utilizando https:\/\/locahost:5000 en su navegador.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Del mismo modo, puede configurar un t\u00fanel para la interfaz de usuario integrada basada en web de Couchbase Server:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>kubectl port-forward cb-hellomicroservices-0000 8091:8091<\/code><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Y ahora puedes acceder al cluster de Couchbase usando https:\/\/localhost:8091.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>El comando port-forward puede ser \u00fatil para desarrolladores y operaciones, pero sigue leyendo para ver c\u00f3mo exponer un servicio de Kubernetes a Internet.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_expose_service_with_load_balancer\">Exponer el servicio con el equilibrador de carga<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Aunque el reenv\u00edo de puertos puede darnos acceso a pods fuera del cl\u00faster Kubernetes, \u00bfqu\u00e9 ocurre cuando los pods inevitablemente se bloquean, mueren y renacen con nuevas direcciones IP, nombres de pod, etc.? Kubernetes nos permite <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/connect-applications-service\/\">crear \"servicios\"<\/a> para dirigirse l\u00f3gicamente a uno o varios pods.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Un servicio puede especificarse en los archivos YAML, al igual que los despliegues.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tambi\u00e9n se puede crear un servicio utilizando <code>kubectl exponer<\/code>. Por ejemplo, puedo exponer un servicio de equilibrador de carga que proporcione acceso a cuantos pods ASP.NET Core haya creado mi despliegue:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>kubectl expose deployments hello-microservice-app-deployment --port=80 --type=LoadBalancer<\/code><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Cuando se cree el servicio, se crear\u00e1 una direcci\u00f3n IP externa. Puede ver la informaci\u00f3n del servicio con <code>kubectl obtener servicios<\/code>.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-PowerShell\" data-lang=\"PowerShell\">PS C:\\Users\\mgroves&gt; kubectl get services\r\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\r\ncb-hellomicroservice ClusterIP Ninguno  8091\/TCP,18091\/TCP 17d\r\ncb-hellomicroservice-srv ClusterIP Ninguno  11210\/TCP,11207\/TCP 17d\r\ncb-hellomicroservice-ui NodePort 10.0.194.12  8091:30624\/TCP,18091:31169\/TCP 17d\r\ncouchbase-operator-admission ClusterIP 10.0.218.95  443\/TCP 17d\r\nkubernetes ClusterIP 10.0.0.1  443\/TCP 17d\r\nhello-microservice-app-deployment LoadBalancer 10.0.6.87 20.NN.NN.21 80:32710\/TCP 13s<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Abra esa direcci\u00f3n IP en un navegador web (20.NN.NN.21 en mi ejemplo), y ser\u00e1 la carga de acceso equilibrado a los pods en su despliegue. A medida que aumenta o disminuye la escala (es decir, cambia el n\u00famero de r\u00e9plicas), el servicio seguir\u00e1 siendo el mismo y continuar\u00e1 proporcionando acceso.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_kubernetes_dashboard\">Cuadro de mandos de Kubernetes<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Kubernetes tiene su propio panel de control de interfaz de usuario que puede ser \u00fatil para obtener una visualizaci\u00f3n de la imagen completa sin tener que recordar un mont\u00f3n de comandos de l\u00edneas de comandos. Para acceder a la <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/kubernetes-dashboard\">Cuadro de mandos de Kubernetes para AKS<\/a>:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Cree un ClusterRoleBinding para el panel de control de Kubernetes para habilitar el acceso:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard<\/code><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, utilice Azure's aks browse para iniciar el cuadro de mandos:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>az aks browse --resource-group helloMicroserviceGroup --name helloMicroserviceAks<\/code><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Esto tambi\u00e9n deber\u00eda activar autom\u00e1ticamente su navegador web para abrir el panel de control:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/11\/12702-kubernetes-dashboard-aks.png\" alt=\"Kubernetes Dashboard on AKS\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Desde el panel de control, puede ver todos los pods, servicios, secretos, nodos y mucho m\u00e1s.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_next_steps\">Pr\u00f3ximos pasos<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Si has estado siguiendo AKS, no olvides eliminar el grupo de recursos cuando hayas terminado. De lo contrario, continuar\u00e1 ejecut\u00e1ndose en tu cuenta Azure y te cobrar\u00e1 por el tiempo de computaci\u00f3n. Puedes eliminar todo el grupo de recursos de este tutorial con un solo comando:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>az group delete --name helloMicroserviceGroup<\/code><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Hab\u00eda un mont\u00f3n de terreno cubierto en este tutorial ASP.NET Core Kubernetes, pero espero que suficiente para apuntar en la direcci\u00f3n correcta y empezar con un \"Hola, mundo\" ejemplo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Al igual que en la \u00faltima entrada del blog, este tutorial de ASP.NET Core Kubernetes es producto de un par de streams de codificaci\u00f3n en directo en Twitch. Puedes ver <a href=\"https:\/\/www.youtube.com\/watch?v=CJsC6RDd9yw\">parte 1<\/a> y <a href=\"https:\/\/www.youtube.com\/watch?v=vJz5TUy1Vdw\">parte 2<\/a> en YouTube. Y si tienes preguntas, puedes pasarte por el <a href=\"https:\/\/twitch.tv\/matthewdgroves\">retransmisi\u00f3n en directo en Twitch<\/a> la pr\u00f3xima vez y \u00a1a charlar!<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Kubernetes es un tema muy amplio. Hay un mont\u00f3n de direcciones que usted podr\u00eda ir de aqu\u00ed. Aqu\u00ed hay algunos enlaces que usted puede ser que desee comprobar hacia fuera:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Este tutorial utiliza la versi\u00f3n 1.2 del operador Couchbase Kubernetes. El YAML para la versi\u00f3n 2.0 (pr\u00f3ximamente) ser\u00e1 diferente.<\/p>\n<\/li>\n<li>\n<p>En <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/\">Documentos AKS de Microsoft<\/a>:<\/p>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/kubernetes-walkthrough\">Inicio r\u00e1pido: Despliegue de un cl\u00faster del servicio Azure Kubernetes mediante la CLI de Azure<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/kubernetes-dashboard\">Acceda al panel web de Kubernetes en Azure Kubernetes Service<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/li>\n<li>\n<p>De mi colega Denis Rosa, <a href=\"https:\/\/github.com\/deniswsrosa\/microservices-on-kubernetes\">Microservicios en Kubernetes<\/a> y la entrada de su blog sobre <a href=\"https:\/\/www.couchbase.com\/blog\/es\/elastic-microservices-with-kubernetes-and-spring-boot\/\">Creaci\u00f3n de microservicios el\u00e1sticos con Kubernetes y Spring Boot<\/a><\/p>\n<\/li>\n<li>\n<p>En <a href=\"https:\/\/kubernetes.io\/\">Kubernetes<\/a>:<\/p>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https:\/\/kubernetes.io\/docs\/tutorials\/kubernetes-basics\/expose\/expose-intro\/\">Uso de un servicio para exponer su aplicaci\u00f3n<br \/>\n<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/connect-applications-service\/\">Conectar aplicaciones con servicios<\/a>que menciona LoadBalancer<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/li>\n<li>\n<p>Recordatorio de que este tutorial ASP.NET Core Kubernetes es un seguimiento de mi anterior post, link:https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/<br \/>\n[ASP.NET Core Microservices: Getting Started]. Si a\u00fan no lo has le\u00eddo, puede que te falte algo de contexto.<\/p>\n<\/li>\n<li>\n<p>Twilio tambi\u00e9n public\u00f3 un <a href=\"https:\/\/www.twilio.com\/blog\/cloud-native-asp-net-core-deploy-azure-kubernetes-service-docker\">entrada de blog similar<\/a> hace unos meses que utiliza el Azure Container Registry.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>ASP.NET Core Kubernetes tutorial will be covered in this blog post, as a follow-up to ASP.NET Core Microservices: Getting Started. I just saw this and it made me laugh WAY HARDER than it probably should have. pic.twitter.com\/R1wleGZM0B &mdash; Carmen Crincoli [&hellip;]<\/p>","protected":false},"author":71,"featured_media":8098,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,10126,1816,2322],"tags":[1519,1896,1545,2103,1673,1500],"ppma_author":[8937],"class_list":["post-8094","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-asp-dotnet","category-couchbase-server","category-kubernetes","tag-docker","tag-docker-compose","tag-kubernetes","tag-microservices","tag-microsoft-azure","tag-tutorial"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ASP.NET Core Kubernetes Tutorial for AKS - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"This ASP.NET Core Kubernetes tutorial includes: building a Docker image, creating an AKS cluster, deploying a microservice, deploying Couchbase Server\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/asp-net-core-kubernetes-tutorial-aks\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ASP.NET Core Kubernetes Tutorial for AKS\" \/>\n<meta property=\"og:description\" content=\"This ASP.NET Core Kubernetes tutorial includes: building a Docker image, creating an AKS cluster, deploying a microservice, deploying Couchbase Server\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/asp-net-core-kubernetes-tutorial-aks\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T16:26:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:40:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/127-hero-clouds-flowers.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"410\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"ASP.NET Core Kubernetes Tutorial for AKS\",\"datePublished\":\"2020-01-24T16:26:13+00:00\",\"dateModified\":\"2025-06-14T02:40:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/\"},\"wordCount\":2171,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/127-hero-clouds-flowers.jpg\",\"keywords\":[\"docker\",\"docker-compose\",\"kubernetes\",\"microservices\",\"Microsoft Azure\",\"tutorial\"],\"articleSection\":[\".NET\",\"ASP.NET\",\"Couchbase Server\",\"Kubernetes\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/\",\"name\":\"ASP.NET Core Kubernetes Tutorial for AKS - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/127-hero-clouds-flowers.jpg\",\"datePublished\":\"2020-01-24T16:26:13+00:00\",\"dateModified\":\"2025-06-14T02:40:22+00:00\",\"description\":\"This ASP.NET Core Kubernetes tutorial includes: building a Docker image, creating an AKS cluster, deploying a microservice, deploying Couchbase Server\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/127-hero-clouds-flowers.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/127-hero-clouds-flowers.jpg\",\"width\":1024,\"height\":410},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ASP.NET Core Kubernetes Tutorial for AKS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"ASP.NET Core Kubernetes Tutorial for AKS - The Couchbase Blog","description":"This ASP.NET Core Kubernetes tutorial includes: building a Docker image, creating an AKS cluster, deploying a microservice, deploying Couchbase Server","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/asp-net-core-kubernetes-tutorial-aks\/","og_locale":"es_MX","og_type":"article","og_title":"ASP.NET Core Kubernetes Tutorial for AKS","og_description":"This ASP.NET Core Kubernetes tutorial includes: building a Docker image, creating an AKS cluster, deploying a microservice, deploying Couchbase Server","og_url":"https:\/\/www.couchbase.com\/blog\/es\/asp-net-core-kubernetes-tutorial-aks\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-01-24T16:26:13+00:00","article_modified_time":"2025-06-14T02:40:22+00:00","og_image":[{"width":1024,"height":410,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/127-hero-clouds-flowers.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"ASP.NET Core Kubernetes Tutorial for AKS","datePublished":"2020-01-24T16:26:13+00:00","dateModified":"2025-06-14T02:40:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/"},"wordCount":2171,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/127-hero-clouds-flowers.jpg","keywords":["docker","docker-compose","kubernetes","microservices","Microsoft Azure","tutorial"],"articleSection":[".NET","ASP.NET","Couchbase Server","Kubernetes"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/","url":"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/","name":"ASP.NET Core Kubernetes Tutorial for AKS - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/127-hero-clouds-flowers.jpg","datePublished":"2020-01-24T16:26:13+00:00","dateModified":"2025-06-14T02:40:22+00:00","description":"This ASP.NET Core Kubernetes tutorial includes: building a Docker image, creating an AKS cluster, deploying a microservice, deploying Couchbase Server","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/127-hero-clouds-flowers.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/127-hero-clouds-flowers.jpg","width":1024,"height":410},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"ASP.NET Core Kubernetes Tutorial for AKS"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","first_name":"Matthew","last_name":"Groves","user_url":"https:\/\/crosscuttingconcerns.com","author_category":"","description":"A Matthew D. Groves le encanta programar.  No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa.  Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa.  Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores.  Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/8094","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=8094"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/8094\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/8098"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=8094"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=8094"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=8094"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=8094"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}