{"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\/pt\/asp-net-core-kubernetes-tutorial-aks\/","title":{"rendered":"Tutorial do ASP.NET Core Kubernetes para AKS"},"content":{"rendered":"<div class=\"paragraph\">\n<p>O tutorial do ASP.NET Core Kubernetes ser\u00e1 abordado nesta postagem do blog, como uma continua\u00e7\u00e3o do <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/asp-net-core-microservices-getting-started\/\">Microsservi\u00e7os ASP.NET Core: Primeiros passos<\/a>.<\/p>\n<\/div>\n<blockquote class=\"twitter-tweet\" data-width=\"550\" data-dnt=\"true\">\n<p lang=\"en\" dir=\"ltr\">Acabei de ver isso e me fez rir MUITO MAIS do que provavelmente deveria. <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>Na postagem anterior do blog, um microsservi\u00e7o ASP.NET Core usando o Couchbase foi criado usando o docker-compose para fins de implanta\u00e7\u00e3o local e desenvolvimento. Uma vez prontos para produ\u00e7\u00e3o, os servi\u00e7os s\u00e3o frequentemente implantados em servi\u00e7os gerenciados do 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 do ASP.NET Core Kubernetes cont\u00e9m algumas etapas que s\u00e3o espec\u00edficas do Azure AKS, mas a maior parte desse material pode ser aplicada a qualquer cluster do Kubernetes.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_asp_net_core_kubernetes_tutorial_overview\">Vis\u00e3o geral do tutorial do ASP.NET Core Kubernetes<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Neste tutorial do ASP.NET Core Kubernetes, examinarei essas etapas:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Crie uma imagem do Docker e envie-a para o hub do Docker<\/li>\n<li>Criar um cluster AKS no Azure<\/li>\n<li>Implantar um microsservi\u00e7o ASP.NET Core no AKS<\/li>\n<li>Implante o Couchbase Server nele usando um operador do Kubernetes<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Al\u00e9m disso, abordarei alguns t\u00f3picos opcionais, mas muito \u00fateis:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Usar o DNS SRV para permitir que o microsservi\u00e7o ASP.NET Core localize seu banco de dados<\/li>\n<li>Configura\u00e7\u00e3o do encaminhamento de porta com o kubectl para obter acesso de t\u00fanel aos pods do AKS<\/li>\n<li>Exibindo o painel do Kubernetes no AKS<\/li>\n<li>Configura\u00e7\u00e3o de um servi\u00e7o de balanceador de carga no Kubernetes para expor o microsservi\u00e7o ASP.NET Core \u00e0 Internet<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Pr\u00e9-requisitos para aproveitar ao m\u00e1ximo este tutorial:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Docker instalado, algum conhecimento b\u00e1sico do Docker e do Docker Hub<\/li>\n<li>Visual Studio instalado, embora isso n\u00e3o seja estritamente necess\u00e1rio<\/li>\n<li>Uma conta do Azure (se n\u00e3o tiver uma, voc\u00ea pode <a href=\"https:\/\/azure.microsoft.com\/en-us\/free\/\">Inscreva-se agora e ganhe $200 em cr\u00e9dito<\/a> gratuitamente). Se quiser usar o EKS, o GKE etc., voc\u00ea ainda poder\u00e1 seguir este tutorial, mas precisar\u00e1 substituir algumas etapas por conta pr\u00f3pria.<\/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\">Criar imagem do Docker<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>As implanta\u00e7\u00f5es do Kubernetes usam imagens de cont\u00eaineres. H\u00e1 muitas op\u00e7\u00f5es para registros de cont\u00eaineres privados (como <a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/container-registry\/\">Registro de cont\u00eaineres do Azure<\/a>), mas para manter as coisas simples neste tutorial, usarei o velho e simples <a href=\"https:\/\/hub.docker.com\/\">Docker Hub<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Primeiro, come\u00e7arei criando uma imagem do Docker a partir do microsservi\u00e7o ASP.NET Core que criei na postagem anterior do blog. No Visual Studio, isso \u00e9 t\u00e3o f\u00e1cil quanto clicar com o bot\u00e3o direito do mouse no Dockerfile e selecionar \"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>Depois que a imagem for criada, ela aparecer\u00e1 em seu reposit\u00f3rio local de imagens do Docker. Voc\u00ea pode ver esse reposit\u00f3rio na linha de comando usando \"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\nREPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE\r\nmattgroves\/hellomicroservice           latest              b2387e47a826        3 weeks ago         213MB\r\nhellomicroservice                      latest              b2387e47a826        3 weeks ago         213MB<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>A pr\u00f3xima etapa \u00e9 <a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/push\/\">enviar essa imagem para o hub do Docker<\/a> (revise se voc\u00ea n\u00e3o tiver usado o Docker Hub antes). Enviei minha imagem para o Docker com o comando <code>docker push mattgroves\/hellomicroservice<\/code> comando. Voc\u00ea provavelmente desejar\u00e1 marcar suas imagens com n\u00fameros de vers\u00e3o para garantir que o Kubernetes esteja puxando a vers\u00e3o exata que voc\u00ea deseja implantar.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se quiser pular esta etapa, voc\u00ea pode usar minha imagem do Docker como exemplo: <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\">Escreva arquivos YAML para implanta\u00e7\u00e3o<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Agora que voc\u00ea publicou uma imagem do Docker, podemos come\u00e7ar a escrever os arquivos YAML para uma implanta\u00e7\u00e3o do Kubernetes. Este tutorial n\u00e3o abordar\u00e1 tudo o que h\u00e1 para saber sobre o Kubernetes, mas indicar\u00e1 se\u00e7\u00f5es dignas de nota, tanto quanto poss\u00edvel. Para este tutorial, ser\u00e3o criados tr\u00eas arquivos YAML no total para serem usados junto com os arquivos YAML que acompanham o Couchbase Operator.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Cada um desses arquivos YAML corresponde a um recurso do Kubernetes. O Kubernetes orquestrar\u00e1 o cluster com base nos recursos que voc\u00ea criar no cluster.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O recurso ASP.NET Core Microservice e o recurso Couchbase Cluster resultar\u00e3o, cada um, em um ou mais <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/pod\/\">\"pods\"<\/a> sendo criados no cluster do Kubernetes. Outros tipos de recursos s\u00e3o <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/secret\/\">\"segredos\"<\/a> (para gerenciar e armazenar informa\u00e7\u00f5es confidenciais) e <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/service\/\">\"servi\u00e7os\"<\/a> (para expor um conjunto de pods) e muitos outros.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_asp_net_core_microservice\">Microsservi\u00e7o ASP.NET Core<\/h3>\n<div class=\"paragraph\">\n<p>Vamos come\u00e7ar criando um arquivo YAML para a pr\u00f3pria implanta\u00e7\u00e3o do microsservi\u00e7o do 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 # for versions before 1.8.0 use apps\/v1beta1\r\nkind: Deployment\r\nmetadata:\r\n  name: hello-microservice-app-deployment\r\nspec:\r\n  selector:\r\n    matchLabels:\r\n      app: hello-microservice-app\r\n  replicas: 1 # tells deployment to run # pods matching the template\r\n  template: # create pods using pod definition in this template\r\n    metadata:\r\n      labels:\r\n        app: hello-microservice-app\r\n    spec:\r\n      containers:\r\n      - name: hello-microservice-app\r\n        image: mattgroves\/hellomicroservice\r\n        imagePullPolicy: Always\r\n        ports:\r\n        - containerPort: 80\r\n          name: server\r\n        env:\r\n        - name: Couchbase__Username\r\n          valueFrom:\r\n            secretKeyRef:\r\n              name: cb-hellomicroservices-auth\r\n              key: username\r\n        - name: Couchbase__Password\r\n          valueFrom:\r\n            secretKeyRef:\r\n              name: cb-hellomicroservices-auth\r\n              key: password\r\n        - name: Couchbase__ConnectionString\r\n          value: couchbase:\/\/cb-hellomicroservices-srv\r\n        resources:\r\n          requests:\r\n            cpu: 100m\r\n            memory: 128Mi\r\n          limits:\r\n            cpu: 250m\r\n            memory: 256Mi<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Observa\u00e7\u00f5es sobre o hello-microservice.yaml:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><code>spec.replicas<\/code>: Isso informa ao Kubernetes quantos pods desse servi\u00e7o devem ser criados. Para come\u00e7ar, 1 \u00e9 suficiente, mas, \u00e0 medida que voc\u00ea for escalando, precisar\u00e1 de mais pods (e provavelmente de um LoadBalancer, que ser\u00e1 abordado mais tarde).<\/li>\n<li><code>spec.template.spec.containers.image<\/code>: Isso informa ao Kubernetes quais imagens usar. No meu caso, mattgroves\/hellomicroservice \u00e9 a que foi criada anteriormente neste tutorial e implantada no Docker hub<\/li>\n<li><code>env<\/code>: Definem vari\u00e1veis de ambiente para cada cont\u00eainer. Em vez de codificar essas credenciais na imagem, estou passando um nome de usu\u00e1rio, uma senha e uma ConnectionString para o microsservi\u00e7o ASP.NET Core, da mesma forma que foi feito na postagem anterior do blog. Mais informa\u00e7\u00f5es sobre o Couchbase__ConnectionString e o DNS SRV mais adiante.<\/li>\n<li>Voc\u00ea tamb\u00e9m pode usar \"service.namespace\" se o cluster do Couchbase estiver em outro namespace.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_couchbase_cluster\">Cluster do Couchbase<\/h3>\n<div class=\"paragraph\">\n<p>Em seguida, aqui est\u00e1 um arquivo YAML para o banco de dados, que usa o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/cloud\/kubernetes\/\">Operador de Kubernetes do Couchbase<\/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\nkind: CouchbaseCluster\r\nmetadata:\r\n  name: cb-hellomicroservices\r\nspec:\r\n  baseImage: couchbase\r\n  version: 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    dataServiceMemoryQuota: 256\r\n    indexServiceMemoryQuota: 256\r\n    searchServiceMemoryQuota: 256\r\n    eventingServiceMemoryQuota: 256\r\n    analyticsServiceMemoryQuota: 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  buckets:\r\n    - name: hellomicroservice\r\n      type: couchbase\r\n      memoryQuota: 256\r\n      replicas: 0\r\n      ioPriority: high\r\n      evictionPolicy: fullEviction\r\n      conflictResolution: seqno\r\n      enableFlush: false\r\n      enableIndexReplica: false\r\n  servers:\r\n    - size: 1\r\n      name: all_services\r\n      services:\r\n        - data\r\n        - index\r\n        - query<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Esse arquivo YAML, por si s\u00f3, n\u00e3o \u00e9 suficiente para usar o Operator, mas a instala\u00e7\u00e3o do Operator vir\u00e1 mais adiante neste tutorial. Observe tamb\u00e9m que, embora o padr\u00e3o Operator seja uma maneira cada vez mais comum e eficaz de gerenciar software com estado no Kubernetes, o YAML varia de acordo com o banco de dados que voc\u00ea est\u00e1 usando (ou seja, esse YAML s\u00f3 funcionar\u00e1 para o Couchbase Server).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Observa\u00e7\u00f5es sobre couchbase-cluster.yaml:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><code>spec.version<\/code>especifica a imagem do cont\u00eainer do Couchbase a ser usada. Estou usando a vers\u00e3o beta2. No momento em que escrevo este texto, o operador s\u00f3 funciona com a vers\u00e3o Enterprise. Isso pode mudar em breve.<\/li>\n<li><code>spec.cluster<\/code>, <code>spec.buckets<\/code>, <code>servidores de especifica\u00e7\u00f5es<\/code>: definem v\u00e1rias configura\u00e7\u00f5es para o cluster do Couchbase Server. Favor <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/couchbase-cluster-config.html\">Consulte a documenta\u00e7\u00e3o para obter a listagem completa<\/a> de configura\u00e7\u00f5es. Este arquivo de exemplo abrange apenas algumas delas.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_couchbase_secrets\">\"Segredos\" do Couchbase<\/h3>\n<div class=\"paragraph\">\n<p>Tamb\u00e9m criei um recurso \"secreto\". Os segredos s\u00e3o onde as informa\u00e7\u00f5es de configura\u00e7\u00e3o, como credenciais, senhas, tokens de autoriza\u00e7\u00e3o etc., podem ser armazenadas e gerenciadas com a pr\u00f3pria API do 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\nkind: Secret\r\nmetadata:\r\n  name: cb-hellomicroservices-auth\r\ntype: Opaque\r\ndata:\r\n  username: QWRtaW5pc3RyYXRvcg== # Administrator\r\n  password: cGFzc3dvcmQ= # password<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Esse segredo cont\u00e9m as credenciais que desejo que o Couchbase (bem como o microsservi\u00e7o ASP.NET Core) use. Os valores s\u00e3o codificados em base64 (valores reais nos coment\u00e1rios). Essas credenciais de exemplo N\u00c3O s\u00e3o suficientes para uma implanta\u00e7\u00e3o real: altere-as para algo mais dif\u00edcil de adivinhar.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Observe o <code>metadados.nome<\/code> \u00e9 \"cb-hellomicroservices-auth\". Consulte hello-microservice.yaml e couchbase-cluster.yaml para ver como esses segredos s\u00e3o referenciados.<\/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>Consulte novamente o arquivo hello-microservice.yaml. Sob <code>env<\/code>Observe o par nome\/valor de \"Couchbase__ConnectionString\" e \"couchbase:\/\/cb-hellomicroservices-srv\". Em vez de fornecer o endere\u00e7o IP do ASP.NET Core ou os URLs dos n\u00f3s do Couchbase Server, estou usando uma string de conex\u00e3o para direcion\u00e1-lo a um <a href=\"https:\/\/support.dnsimple.com\/articles\/srv-record\/\">Entrada SRV do DNS<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Em um cluster do Couchbase, os pods reais que executam o Couchbase t\u00eam a possibilidade de alterar seus nomes regularmente. Portanto, \u00e9 recomend\u00e1vel usar o DNS SRV para localizar o servi\u00e7o do Couchbase. Felizmente, o Operador Aut\u00f4nomo do Couchbase cria automaticamente uma entrada DNS SRV para n\u00f3s.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Em breve, poderemos v\u00ea-lo no Kubernetes Dashboard, mas, enquanto isso, observe que ele ser\u00e1 o nome do cluster do Couchbase mais \"-srv\". Portanto, no nosso caso, \u00e9 \"cb-hellomicroservices-srv\".<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Fiz uma pequena altera\u00e7\u00e3o no microsservi\u00e7o ASP.NET Core desde a postagem anterior no blog: Agora estou usando o <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>Al\u00e9m de adicionar essa biblioteca do NuGet e usar ConnectionString em vez de Server no arquivo appsettings.json, a \u00fanica outra altera\u00e7\u00e3o que precisa ser feita \u00e9 <code>AddCouchbaseDnsDiscovery<\/code> dentro do <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>\u00c9 t\u00e3o f\u00e1cil quanto isso. Para saber mais sobre o DNS SRV, consulte <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/dns-pod-service\/#srv-records\">Registros SRV<\/a> na documenta\u00e7\u00e3o do Kubernetes.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_deployment_to_aks\">Implanta\u00e7\u00e3o no AKS<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Neste ponto, estamos prontos para implementar o AKS. Para revisar, aqui est\u00e3o os ingredientes que temos at\u00e9 agora:<\/p>\n<\/div>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li>Imagem do Docker do ASP.NET Core no Docker Hub<\/li>\n<li>Arquivo YAML para a implanta\u00e7\u00e3o do ASP.NET Core<\/li>\n<li>Arquivo YAML para a implanta\u00e7\u00e3o do cluster do Couchbase<\/li>\n<li>Arquivo YAML para os segredos do Couchbase (referenciado por 2 e 3)<\/li>\n<\/ol>\n<\/div>\n<div class=\"paragraph\">\n<p>Para implantar no AKS, segui os passos <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/kubernetes-walkthrough\">In\u00edcio r\u00e1pido: Implantar um cluster do Servi\u00e7o Kubernetes do Azure usando a CLI do Azure<\/a> na documenta\u00e7\u00e3o da Microsoft. Aqui est\u00e1 um breve resumo das etapas que segui:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>(Se quiser usar sua linha de comando local, verifique se voc\u00ea tem <a href=\"https:\/\/docs.microsoft.com\/en-us\/cli\/azure\/install-azure-cli?view=azure-cli-latest\">azure-cli<\/a> instalado. Caso contr\u00e1rio, voc\u00ea pode usar o <a href=\"https:\/\/shell.azure.com\/\">Shell de nuvem do Azure<\/a>).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Primeiro, fa\u00e7a login no Azure: <code>login az<\/code>. Voc\u00ea ser\u00e1 solicitado a inserir suas credenciais no navegador da Web.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Depois de fazer o login, primeiro crie um \"grupo de recursos\". Esse \u00e9 um grupo organizacional dentro do Azure. Especifique um data center (eu usei 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>Em seguida, crie um cluster AKS usando o grupo de recursos que voc\u00ea acabou de criar. H\u00e1 muitas op\u00e7\u00f5es para isso. Para manter esse exerc\u00edcio relativamente simples e de baixo custo, optei por criar 3 n\u00f3s usando o tamanho de VM Standard_B2s. Para implementa\u00e7\u00f5es de produ\u00e7\u00e3o do Couchbase, voc\u00ea provavelmente precisar\u00e1\/querer\u00e1 tamanhos mais 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>Esta etapa levar\u00e1 algum tempo para ser executada. Espere que o Azure leve cerca de 10 minutos para configurar esse cluster do Kubernetes AKS.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Depois que o cluster for criado, use <code>obter credenciais<\/code> para permitir que o kubectl saiba qual cluster ele usar\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>Nesse ponto, \u00e9 hora de <strong>criar<\/strong> alguns recursos do Kubernetes. Os primeiros seis arquivos YAML podem ser baixados em \"Kubernetes\" <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\">couchbase.com\/downloads<\/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 operator-role.yaml\r\nkubectl create -f operator-service-account.yaml\r\nkubectl create -f operator-role-binding.yaml\r\nkubectl create -f operator-deployment.yaml<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Em seguida, use os tr\u00eas arquivos YAML que foram criados neste 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 secret.yaml\r\nkubectl create -f couchbase-cluster.yaml\r\nkubectl create -f hello-microservice.yaml<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Para ver o estado de seus pods do Kubernetes, use <code>kubectl get pods<\/code>. Os pods do Couchbase levar\u00e3o alguns minutos para ficarem prontos.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_port_forwarding\">Encaminhamento de portas<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Na implanta\u00e7\u00e3o acima, nenhuma das implanta\u00e7\u00f5es do Kubernetes est\u00e1 realmente exposta fora do Kubernetes. Uma maneira de verificar se o microsservi\u00e7o est\u00e1 funcionando \u00e9 usar a fun\u00e7\u00e3o <code>kubectl port-forward<\/code> comando. Isso criar\u00e1 um \"t\u00fanel\" localhost para o pod fornecido.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Por exemplo, vamos criar um t\u00fanel da porta 5000 do host local para o microsservi\u00e7o ASP.NET Core em execu\u00e7\u00e3o na porta 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>Neste ponto, voc\u00ea pode acessar o microsservi\u00e7o usando https:\/\/locahost:5000 em seu navegador.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Da mesma forma, voc\u00ea pode configurar um t\u00fanel para a interface de usu\u00e1rio integrada do Couchbase Server baseada na Web:<\/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>E agora voc\u00ea pode acessar o cluster do Couchbase usando https:\/\/localhost:8091.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O comando port-forward pode ser \u00fatil para desenvolvedores e opera\u00e7\u00f5es, mas continue lendo para ver como expor um servi\u00e7o do Kubernetes \u00e0 Internet.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_expose_service_with_load_balancer\">Expor o servi\u00e7o com o balanceador de carga<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Embora o encaminhamento de portas possa nos dar acesso a pods fora do cluster do Kubernetes, o que acontece quando os pods inevitavelmente travam, morrem e renascem com novos endere\u00e7os IP, nomes de pods etc.? O Kubernetes nos permite <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/connect-applications-service\/\">criar \"servi\u00e7os\"<\/a> para endere\u00e7ar um ou mais pods logicamente.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Um servi\u00e7o pode ser especificado nos arquivos YAML, assim como as implementa\u00e7\u00f5es.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Um servi\u00e7o tamb\u00e9m pode ser criado usando <code>kubectl expose<\/code>. Por exemplo, posso expor um servi\u00e7o de balanceador de carga que fornece acesso a quantos pods do ASP.NET Core minha implanta\u00e7\u00e3o tiver criado:<\/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>Quando o servi\u00e7o for criado, ele criar\u00e1 um endere\u00e7o IP externo. Voc\u00ea pode visualizar as informa\u00e7\u00f5es do servi\u00e7o com <code>kubectl get services<\/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      None          &lt;none&gt;        8091\/TCP,18091\/TCP               17d\r\ncb-hellomicroservice-srv            ClusterIP      None          &lt;none&gt;        11210\/TCP,11207\/TCP              17d\r\ncb-hellomicroservice-ui             NodePort       10.0.194.12   &lt;none&gt;        8091:30624\/TCP,18091:31169\/TCP   17d\r\ncouchbase-operator-admission        ClusterIP      10.0.218.95   &lt;none&gt;        443\/TCP                          17d\r\nkubernetes                          ClusterIP      10.0.0.1      &lt;none&gt;        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 esse endere\u00e7o IP em um navegador da Web (20.NN.NN.21 no meu exemplo), e ele ter\u00e1 acesso balanceado de carga aos pods em sua implanta\u00e7\u00e3o. \u00c0 medida que voc\u00ea aumentar ou diminuir a escala (ou seja, alterar o n\u00famero de r\u00e9plicas), o servi\u00e7o permanecer\u00e1 o mesmo e continuar\u00e1 a fornecer acesso.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_kubernetes_dashboard\">Painel do Kubernetes<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O Kubernetes tem seu pr\u00f3prio painel de interface do usu\u00e1rio, que pode ser \u00fatil para obter uma visualiza\u00e7\u00e3o do panorama geral sem precisar se lembrar de v\u00e1rios comandos de linhas de comando. Para acessar o <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/kubernetes-dashboard\">Painel do Kubernetes para AKS<\/a>:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Crie um ClusterRoleBinding para o painel do Kubernetes para permitir o acesso:<\/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>Em seguida, use o aks browse do Azure para iniciar o painel:<\/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>Isso tamb\u00e9m deve acionar automaticamente seu navegador da Web para abrir o painel:<\/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>No painel, voc\u00ea pode visualizar todos os pods, servi\u00e7os, segredos, n\u00f3s e muito mais.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_next_steps\">Pr\u00f3ximas etapas<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Se voc\u00ea estiver acompanhando o AKS, n\u00e3o se esque\u00e7a de remover o grupo de recursos quando terminar. Caso contr\u00e1rio, ele continuar\u00e1 a ser executado na sua conta do Azure e cobrar\u00e1 pelo tempo de computa\u00e7\u00e3o. Voc\u00ea pode remover todo o grupo de recursos deste tutorial com um \u00fanico 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>Este tutorial do ASP.NET Core Kubernetes abordou uma grande quantidade de assuntos, mas esperamos que seja o suficiente para indicar a dire\u00e7\u00e3o certa e fazer com que voc\u00ea comece com um exemplo de \"Ol\u00e1, mundo\".<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Como na \u00faltima postagem do blog, este tutorial do ASP.NET Core Kubernetes \u00e9 um produto de algumas transmiss\u00f5es de codifica\u00e7\u00e3o ao vivo no Twitch. Voc\u00ea pode ver <a href=\"https:\/\/www.youtube.com\/watch?v=CJsC6RDd9yw\">Parte 1<\/a> e <a href=\"https:\/\/www.youtube.com\/watch?v=vJz5TUy1Vdw\">Parte 2<\/a> no YouTube. E, se tiver d\u00favidas, voc\u00ea pode visitar o <a href=\"https:\/\/twitch.tv\/matthewdgroves\">transmiss\u00e3o ao vivo no Twitch<\/a> Na pr\u00f3xima vez e converse!<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O Kubernetes \u00e9 um t\u00f3pico muito amplo. H\u00e1 muitas dire\u00e7\u00f5es que voc\u00ea poderia seguir a partir daqui. Aqui est\u00e3o alguns links que voc\u00ea pode querer conferir:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Este tutorial usa a vers\u00e3o 1.2 do operador do Kubernetes do Couchbase. O YAML para a vers\u00e3o 2.0 (em breve) ser\u00e1 diferente.<\/p>\n<\/li>\n<li>\n<p>De <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/\">Documentos do Microsoft AKS<\/a>:<\/p>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/kubernetes-walkthrough\">In\u00edcio r\u00e1pido: Implantar um cluster do Servi\u00e7o Kubernetes do Azure usando a CLI do Azure<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/kubernetes-dashboard\">Acesse o painel da Web do Kubernetes no Servi\u00e7o de Kubernetes do Azure<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/li>\n<li>\n<p>Do meu colega Denis Rosa, <a href=\"https:\/\/github.com\/deniswsrosa\/microservices-on-kubernetes\">Microsservi\u00e7os no Kubernetes<\/a> e sua postagem no blog sobre <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/elastic-microservices-with-kubernetes-and-spring-boot\/\">Cria\u00e7\u00e3o de microsservi\u00e7os el\u00e1sticos com Kubernetes e Spring Boot<\/a><\/p>\n<\/li>\n<li>\n<p>De <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 um servi\u00e7o para expor seu aplicativo<br \/>\n<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/connect-applications-service\/\">Conex\u00e3o de aplicativos com servi\u00e7os<\/a>que menciona o LoadBalancer<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/li>\n<li>\n<p>Lembrete de que este tutorial do ASP.NET Core Kubernetes \u00e9 uma continua\u00e7\u00e3o da minha postagem anterior, link:https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/<br \/>\n[ASP.NET Core Microservices: Getting Started]. Se voc\u00ea ainda n\u00e3o leu isso, talvez esteja perdendo algum contexto.<\/p>\n<\/li>\n<li>\n<p>A Twilio tamb\u00e9m publicou um <a href=\"https:\/\/www.twilio.com\/blog\/cloud-native-asp-net-core-deploy-azure-kubernetes-service-docker\">postagem de blog semelhante<\/a> h\u00e1 alguns meses, que usa o Registro de Cont\u00eaineres do Azure.<\/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\/pt\/asp-net-core-kubernetes-tutorial-aks\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/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\/pt\/asp-net-core-kubernetes-tutorial-aks\/","og_locale":"pt_BR","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\/pt\/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":"pt-BR","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":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/asp-net-core-kubernetes-tutorial-aks\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"Blog do Couchbase","description":"Couchbase, o banco de dados 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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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":"pt-BR","@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 \u00e9 um cara que adora programar. N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/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":"Matthew D. Groves \u00e9 um cara que adora programar.  N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa.  Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90.  Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores.  Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/8094","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=8094"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/8094\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/8098"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=8094"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=8094"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=8094"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=8094"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}