Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Criar um Deployment stateless

Última atualização: Aug 25, 2026

Um Deployment é um tipo comum de workload do Kubernetes usado para gerenciar aplicações stateless. Ele garante que um número especificado de Pods réplica esteja sempre em execução no cluster, no estado definido por você. Este tópico descreve como criar uma aplicação stateless em um cluster do Container Service for Kubernetes (ACK) utilizando o console do ACK e o kubectl.

Antes de começar

Antes de criar um workload, leia Workloads para compreender os conceitos básicos e as considerações principais. Este tópico está dividido nas seguintes seções:

  • Create a Deployment: Fornece guias de início rápido sobre como criar um Deployment usando o console e o kubectl.

  • Configuration parameters: Explica os parâmetros de configuração do console e fornece um arquivo YAML de exemplo para o kubectl.

Importante

Os exemplos neste tópico utilizam uma imagem pública. Para baixar uma imagem pública, seu cluster ou nós devem ter acesso à internet pública. Habilite esse acesso de uma das seguintes maneiras:

  • Enable public network access for a cluster (Recomendado): Crie um gateway NAT para a VPC onde o cluster está implantado. Isso fornece acesso à internet pública para todos os recursos no cluster.

  • Atribua um static public IP address a um nó: Nós com um endereço IP público podem baixar imagens públicas. No entanto, atribua um endereço IP público a cada nó onde implantar o workload.

Criar um Deployment

Usar o console

Importante

As etapas a seguir apresentam um processo simplificado para criar um workload. Siga estas etapas para implantar e verificar sua aplicação rapidamente. Após familiarizar-se com as operações básicas, consulte Configuration parameters para personalizar seu workload.

  1. Configure basic application information

    1. Faça login no console do ACK e clique em Clusters no painel de navegação à esquerda. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, escolha Workloads > Deployments. Na página Deployments, clique em Create from Image.

      image

    2. Na página Basic Information, configure as definições básicas da aplicação. Em seguida, clique em Next.

      image

  2. Configure the container

    Na seção Container Configuration, configure o Image Name e a Port. As outras configurações são opcionais; mantenha os valores padrão se preferir. Depois, clique em Next para abrir a página do assistente Advanced Settings. O endereço da imagem é o seguinte.

    Importante

    Para baixar esta imagem, habilite o acesso à internet pública para o seu cluster. Se você manteve a opção Configure SNAT for VPC selecionada ao criar o cluster, o acesso à internet pública já está habilitado. Caso contrário, consulte Enable public network access for a cluster.

    anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

    image

  3. Configure advanced settings

    Na página Advanced, configure as definições de controle de acesso, dimensionamento e agendamento. Na seção Access Control, configure como expor os Pods de backend e clique em OK. Em seguida, clique em Create na parte inferior da página.

    Importante

    Esta etapa cria um Service do tipo LoadBalancer para expor o workload. A instância associada do Server Load Balancer (SLB) gera custos. Para mais informações, consulte Pay-as-you-go. Se não precisar mais da instância do SLB, libere-a prontamente para evitar cobranças desnecessárias.

    image

  4. View the application

    Após a criação da aplicação, a página Complete é exibida. No painel Creation Task Submitted, clique em View Details. Clique na aba Access Method, localize o Service recém-criado (nginx-test-svc) e clique no link na coluna External Endpoint para acessar a página de boas-vindas do NGINX.image

    image

    É possível View, Edit ou Redeploy o workload criado.image

Usar o kubectl

Importante

Antes de criar um workload, conecte-se ao seu cluster ACK usando o kubectl. Para mais informações, consulte Obtain the kubeconfig file of a cluster and use kubectl to connect to the cluster.

  1. Copie a seguinte configuração YAML e salve-a em deployment.yaml. Esta configuração define um Deployment e um Service do tipo LoadBalancer para acesso externo.

    apiVersion: apps/v1
    kind: Deployment    # The type of workload.
    metadata:
      name: nginx-test
      namespace: default  # The namespace. Change it based on your requirements.
      labels:
        app: nginx
    spec:
      replicas: 2  # The number of Pod replicas.
      selector:
        matchLabels:
          app: nginx
      template: # The Pod template.
        metadata:
          labels: # The Pod labels.
            app: nginx 
        spec:
          containers:
          - name: nginx  # The container name.
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6  # The NGINX image and its version.
            ports:
            - containerPort: 80  # The port exposed by the container.
              protocol: TCP  # The protocol. You can set it to TCP or UDP. Default value: TCP.
    ---
    # The Service definition.
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-test-svc
      namespace: default  # The namespace. Change it based on your requirements.
      labels:
        app: nginx
    spec:
      selector:
        app: nginx  # Selects Pods with the specified label.
      ports:
        - port: 80           # The port exposed by the Service in the cluster.
          targetPort: 80     # The container port that the traffic is forwarded to.
          protocol: TCP      # The protocol. Default value: TCP.
      type: LoadBalancer     # The type of Service. Default value: ClusterIP (for internal access only).
  2. Execute o seguinte comando para criar o Deployment e o Service:

    kubectl apply -f deployment.yaml

    Saída esperada:

    deployment.apps/nginx-test created
    service/nginx-test-svc created
  3. Execute o seguinte comando para consultar o endereço IP público do Service:

    kubectl get svc

    Saída esperada:

    NAME            TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)        AGE
    kubernetes      ClusterIP      172.16.**.***    <none>          443/TCP        4h47m
    nginx-test-svc  LoadBalancer   172.16.**.***    106.14.**.***   80:31130/TCP   1h10m
  4. Insira o endereço IP público do Nginx (106.14.**.***) em um navegador para acessar o contêiner Nginx do workload.

    image

Parâmetros de configuração

Parâmetros do console

Informações básicas

image

Parâmetro

Descrição

Name

O nome do workload. Os nomes dos Pods são derivados deste nome.

Namespace

O namespace que contém o workload.

Replicas

O número de réplicas de Pod. Valor padrão: 2.

Type

O tipo do workload. Para mais informações sobre como selecionar um tipo de workload, consulte Create a workload.

Label

Os rótulos do workload.

Annotations

As anotações do workload.

Synchronize Timezone

Especifica se o contêiner usa o mesmo fuso horário do seu nó host.

Configuração do contêiner

Geral

image

Parâmetro

Descrição

Image Name

  • Select images

    Clique em Select images para escolher uma imagem. Selecione um dos seguintes tipos de imagem:

    • Container Registry Enterprise Edition: Selecione uma imagem da Enterprise Edition hospedada no Alibaba Cloud Container Registry (ACR). Especifique a região e a instância do ACR onde a imagem está localizada. Para mais informações sobre o ACR, consulte What is ACR?.

    • Container Registry Personal Edition: Selecione uma imagem da Personal Edition hospedada no ACR. Especifique a região e a instância do ACR onde a imagem está localizada.

    • Artifact Center: Imagens comuns fornecidas pela Alibaba Cloud e pela comunidade OpenAnolis. Para usar uma imagem do Artifact Center, enable public internet access for the cluster. Para mais informações, consulte Artifact Center.

    Ao usar uma imagem de outra source, insira diretamente o endereço da imagem no formato domainname/namespace/imagename:tag. Se não especificar o domainname, por exemplo, ao inserir nginx:1.7.9, a imagem será obtida do Docker Hub.

  • Select image pull policy

    O ACK suporta as seguintes políticas de pull de imagem (imagePullPolicy):

    • IfNotPresent (Padrão): Se a imagem já estiver presente no nó, a versão local é usada. Caso contrário, a imagem é obtida do repositório.

    • Always: A imagem é sempre obtida do repositório toda vez que um Pod é criado.

    • Never: Apenas a imagem local é usada. Se a imagem não estiver presente no nó, o Pod falhará ao iniciar.

  • Set image pull Secret

    Ao usar imagens do ACR ou de um repositório de terceiros, talvez seja necessário configurar um Secret para baixar as imagens.

    Nota

    Para instâncias do ACR Enterprise Edition, use um componente sem senha para baixar imagens. Para mais informações, consulte Install and use the password-free component for unmanaged clusters.

Resource limit

Os resources.limits do contêiner. Para mais informações, consulte Requests and Limits.

Resource requests

Os resources.requests de recursos do contêiner. Para mais informações, consulte Requests and Limits.

Container start parameter

  • stdin: Indica que a entrada padrão está habilitada para o contêiner.

  • tty: Aloca um terminal virtual para o contêiner, permitindo o envio de sinais para ele.

Essas duas opções são normalmente usadas juntas para anexar um terminal (tty) à entrada padrão do contêiner (stdin). Por exemplo, um programa interativo recebe a entrada padrão do usuário e a exibe no terminal.

Privileged container

  • Se você marcar esta caixa de seleção, privileged será definido como true para habilitar o modo privilegiado.

  • Se você não marcar esta caixa de seleção, privileged será definido como false para desabilitar o modo privilegiado.

O modo privilegiado concede a um contêiner quase o mesmo nível de acesso ao sistema operacional host que os processos em execução no host. Isso inclui acesso a dispositivos de hardware e a capacidade de montar sistemas de arquivos.

Init containers

Selecione esta opção para criar um contêiner de inicialização.

Os contêineres de inicialização são executados e concluídos antes que os contêineres da aplicação principal iniciem. Eles podem ser usados para atrasar a inicialização dos contêineres da aplicação até que certas pré-condições sejam atendidas, como esperar que um service dependente fique disponível. Os contêineres de inicialização também podem conter ferramentas utilitárias ou scripts de configuração que não estão presentes na imagem da aplicação para inicializar o ambiente de execução, como definir parâmetros de kernel ou gerar arquivos de configuração. Para mais informações, consulte Init Containers na documentação do Kubernetes.

Portas

image

Parâmetro

Descrição

Name

O nome da porta do contêiner. Serve apenas para fins de identificação e não tem impacto funcional.

Container Port

A porta que o contêiner expõe. O valor deve ser um número inteiro de 1 a 65535. Um contêiner deve expor uma porta para ser acessível fora do Pod e permitir comunicação com outros contêineres no mesmo Pod.

Todos os contêineres em um Pod compartilham o mesmo namespace de rede, portanto, os números de porta devem ser únicos dentro de um Pod.

Protocol

O protocolo da camada 4 usado pela porta do contêiner. Valores válidos: TCP e UDP.

Variáveis de ambiente

image

Parâmetro

Descrição

Type

O método usado para definir variáveis de ambiente. Os seguintes tipos são suportados:

  • Custom

    Use env para codificar diretamente variáveis de ambiente em um workload.

  • ConfigMaps

    Use envFrom para recuperar dados de configuração não sensíveis de um ConfigMap.

  • Secrets

    Use envFrom para recuperar informações sensíveis armazenadas em um ConfigMap, como senhas e chaves de API.

  • Value/ValueFrom

    Use value/valueFrom para recuperar outras variáveis de ambiente ou valores predefinidos.

  • ResourceFieldRef

    Use resourceFieldRef para obter informações de recursos sobre o nó onde o Pod está em execução.

Referencie todos os pares chave-valor de um ConfigMap ou Secret. Por exemplo, para referenciar todos os dados de um Secret, selecione o tipo Secrets e então selecione o Secret alvo sem especificar uma chave.Variáveis de ambiente

O YAML correspondente também referencia todo o Secret.yaml

Para selecionar uma referência de recurso, use o parâmetro resourceFieldRef. Este parâmetro referencia os valores de recursos declarados para um contêiner na especificação do Pod e passa esses valores para o contêiner como variáveis de ambiente. O YAML correspondente é o seguinte:

image

Variable Key

O nome da variável de ambiente dentro do Pod.

Value/ValueFrom

O valor da variável de ambiente ou uma referência a um valor de outra source.

Verificações de integridade

image

Parâmetro

Descrição

Liveness probe: Uma sonda de atividade verifica se um contêiner está em execução. Se a sonda falhar várias vezes, o kubelet reinicia o contêiner. Isso pode ajudar a resolver problemas como deadlocks, onde o contêiner está em execução, mas incapaz de progredir.

Tipo de solicitação: Solicitação HTTP

Envia uma solicitação HTTP para o contêiner para verificar periodicamente sua integridade.

  • Protocol: HTTP ou HTTPS.

  • Path: O caminho a ser acessado no servidor HTTP.

  • Port: A porta ou nome da porta exposta pelo contêiner. O número da porta deve ser um inteiro de 1 a 65535.

  • HTTP Headers: Cabeçalhos personalizados a serem definidos na solicitação HTTP. Especifique vários cabeçalhos com a mesma chave.

  • Initial Delay (segundos): O número de segundos a aguardar após o início de um contêiner antes que a primeira sonda seja realizada. Corresponde ao parâmetro initialDelaySeconds. O padrão é 3 segundos.

  • Probe interval (segundos): O intervalo para realizar uma sonda, especificado pelo parâmetro periodSeconds. O valor padrão é 10 segundos e o valor mínimo é 1 segundo.

  • Timeout (segundos): O período de tempo limite para uma sonda, especificado pelo parâmetro timeoutSeconds. O valor padrão é 1 segundo e o valor mínimo é 1 segundo.

  • Healthy threshold: O número mínimo de sondas bem-sucedidas consecutivas necessárias para marcar o contêiner como íntegro após uma falha. Valor padrão: 1. Valor mínimo: 1. Para uma sonda de atividade, este valor deve ser 1.

  • Unhealthy threshold: O número mínimo de sondas com falha consecutivas necessárias para marcar o contêiner como não íntegro. Valor padrão: 3. Valor mínimo: 1.

Tipo de solicitação: Conexão TCP

O kubelet tenta abrir um soquete TCP na porta especificada. Se a conexão for estabelecida, o contêiner é considerado íntegro. Caso contrário, é considerado como tendo falhado.

  • Port: A porta ou nome da porta exposta pelo contêiner. O número da porta deve ser um inteiro de 1 a 65535.

  • Initial delay (segundos): O valor do parâmetro initialDelaySeconds. É o número de segundos a aguardar após o início de um contêiner antes que a primeira sonda seja realizada. O padrão é 15 segundos.

  • Probe frequency (segundos): O intervalo para realizar a sonda, especificado pelo parâmetro periodSeconds. O valor padrão é 10 segundos e o valor mínimo é 1 segundo.

  • Timeout (segundos): O período de tempo limite para uma sonda. Corresponde ao parâmetro timeoutSeconds. O valor padrão é 1 segundo e o valor mínimo é 1 segundo.

  • Healthy threshold: O número mínimo de sondas bem-sucedidas consecutivas necessárias para marcar o contêiner como íntegro após uma falha. Valor padrão: 1. Valor mínimo: 1. Para uma sonda de atividade, este valor deve ser 1.

  • Unhealthy threshold: O número mínimo de sondas com falha consecutivas necessárias para marcar o contêiner como não íntegro. Valor padrão: 3. Valor mínimo: 1.

Tipo de solicitação: Linha de comando

Executa um comando dentro do contêiner para determinar seu status de integridade.

  • Command: O comando usado para sondar a integridade do contêiner.

  • Initial delay (segundos): O valor para initialDelaySeconds, que é o número de segundos a aguardar após o início de um contêiner antes que a primeira sonda seja realizada. O padrão é 5 segundos.

  • Probe Interval (segundos): O intervalo de tempo para realizar uma sonda. Corresponde ao parâmetro periodSeconds. O valor padrão é 10 segundos e o valor mínimo é 1 segundo.

  • Timeout (segundos): O parâmetro timeoutSeconds, que especifica o período de tempo limite para uma sonda. O valor padrão é 1 segundo. O valor mínimo é 1 segundo.

  • Healthy threshold: O número mínimo de sondas bem-sucedidas consecutivas necessárias para marcar o contêiner como íntegro após uma falha. Valor padrão: 1. Valor mínimo: 1. Para uma sonda de atividade, este valor deve ser 1.

  • Unhealthy threshold: O número mínimo de sondas com falha consecutivas necessárias para marcar o contêiner como não íntegro. Valor padrão: 3. Valor mínimo: 1.

Readiness probe: Uma sonda de prontidão verifica se um contêiner está pronto para aceitar tráfego. Um Pod é adicionado como backend a um Service somente após sua sonda de prontidão ser bem-sucedida.

Startup Probes: Estas sondas são executadas apenas quando um contêiner inicia para verificar se ele começou com sucesso. As Liveness Probes e Readiness Probes são executadas apenas após a sonda de inicialização ser bem-sucedida.

Nota

As sondas de inicialização são suportadas apenas em clusters Kubernetes que executam a versão 1,18 ou posterior.

Ciclo de vida

image

Parâmetro

Descrição

Start

Define o comando e os argumentos de início para o contêiner. Estes definem as operações realizadas quando o contêiner inicia e são usados para inicializar o service da aplicação. Adequado para implantações de aplicações que requerem variáveis de ambiente específicas, pontos de montagem ou mapeamentos de porta.

Post Start

Define um comando executado imediatamente após a criação de um contêiner. Útil para realizar tarefas como inicializar configurações ou executar scripts antes que o processo principal inicie.

Pre Stop

Define um comando executado imediatamente antes de um contêiner ser encerrado. Útil para desligar o processo da aplicação de forma elegante, garantindo a consistência dos dados e prevenindo perda de dados ou anomalias no service.

Configure manipuladores de início, pós-início e pré-parada para o ciclo de vida de um contêiner. Para mais informações, consulte Attach Handlers to Container Lifecycle Events na documentação do Kubernetes.

Volumes

Parâmetro

Descrição

Add Local Storage

Monta um volume de armazenamento local do nó host no Pod. Os dados em um volume de armazenamento local são armazenados no nó e perdidos se o nó for desligado. O armazenamento local também suporta a montagem de Secrets, ConfigMaps e outros tipos de volumes efêmeros. Antes de usar volumes de armazenamento, leia Storage para entender os conceitos básicos de armazenamento no ACK.

Add PVC (PersistentVolumeClaim)

Monta um volume de armazenamento em cloud no Pod para persistir dados importantes. Um volume de armazenamento em cloud é um service de armazenamento remoto independente dos nós de trabalho e não é afetado por alterações nos nós. O ACK suporta vários services de armazenamento da Alibaba Cloud, como discos em cloud, Apsara File Storage NAS e Object Storage Service (OSS). Antes de usar volumes de armazenamento, leia Storage para entender os conceitos básicos de armazenamento no ACK.

Log

Collection configuration

  • Log Service: Um Logstore é criado no projeto do Log Service associado ao cluster para armazenar logs coletados. Antes de usar logs, leia Log Management para entender os conceitos básicos de logging no ACK.

  • O caminho do log no contêiner. Defina como Stdout para coletar os logs de saída padrão do contêiner.

Custom Tag

Após definir uma tag personalizada, a tag é coletada junto com a saída de log do contêiner. Isso facilita a análise, como estatísticas e filtragem de logs.

Configuração avançada

Cartão de configuração

Parâmetro

Descrição

Access Control

Services

Um Service fornece um endpoint estável e unificado da Camada 4 (camada de transporte) para um grupo de Pods. É um recurso obrigatório para expor um workload. Os Services suportam vários tipos, incluindo Cluster IP, Node Port e Load Balancer. Antes de configurar um Service, consulte Service management para entender os conceitos básicos.

Ingresses

Um Ingress fornece um ponto de entrada da Camada 7 (camada de aplicação) para múltiplos Services em um cluster e encaminha solicitações para diferentes Services com base na correspondência de nome de domínio. Antes de usar um Ingress, instale um controlador de Ingress. O ACK oferece várias opções para diferentes cenários. Para mais informações, consulte Comparison of NGINX Ingress Controller, ALB Ingress Controller, and MSE Ingress gateways.

Scaling

Horizontal Pod Autoscaler (HPA)

O Horizontal Pod Autoscaler (HPA) dimensiona automaticamente o número de Pods com base nas métricas de desempenho do contêiner. Isso ajuda a ajustar o total de recursos usados pelo seu workload em resposta a flutuações na carga de negócios, escalando horizontalmente para lidar com altas cargas e reduzindo a escala para economizar recursos durante baixas cargas. Para mais informações, consulte Use a HorizontalPodAutoscaler to automatically scale Pods.

Cron Horizontal Pod Autoscaler (CronHPA)

O Cron Horizontal Pod Autoscaler (CronHPA) dimensiona workloads em horários agendados. Indicado para cenários com mudanças cíclicas previsíveis na carga de negócios, como picos de tráfego em plataformas de mídia social após o almoço e jantar. Para mais informações, consulte Use a CronHPA to automatically scale Pods.

Scheduling

Upgrade strategy

A estratégia usada para substituir Pods antigos por novos quando a configuração do Pod muda.

  • rolling update: Substitui os Pods um por um ou em lotes. A próxima substituição começa apenas após os novos Pods estarem em execução com sucesso. Este método garante a continuidade do service, mas os clientes podem acessar diferentes versões dos Pods simultaneamente durante a atualização.

  • recreate: Encerra todos os Pods existentes de uma vez antes de criar novos. Isso pode causar uma interrupção no service, mas garante que todos os Pods executem a mesma versão após a atualização.

  • Node affinity

  • Pod affinity

  • Pod anti-affinity

  • Tolerations

Afinidade, anti-afinidade e tolerâncias são usados para controlar como os Pods são agendados nos nós. Essas operações são complexas e exigem planejamento prévio. Para mais informações, consulte Scheduling.

Labels and annotations

Pod labels

Adiciona um rótulo a cada Pod pertencente ao workload. Em um cluster, recursos como workloads e Services usam rótulos para corresponder aos Pods. Por padrão, o ACK adiciona um rótulo no formato app:(nome da aplicação) aos Pods.

Pod annotations

Adiciona anotações a cada Pod neste workload. Alguns recursos no ACK usam anotações, que podem ser adicionadas ou modificadas conforme necessário ao usar esses recursos.

YAML de workload de exemplo

apiVersion: apps/v1
kind: Deployment    # The type of workload.
metadata:
  name: nginx-test
  namespace: default  # The namespace. Change it based on your requirements.
  labels:
    app: nginx
spec:
  replicas: 2  # The number of Pod replicas.
  selector:
    matchLabels:
      app: nginx
  template: # The Pod template.
    metadata:
      labels: # The Pod labels.
        app: nginx 
      annotations: # The Pod annotations.
        description: "This is an application deployment"
    spec:
      containers:
      - name: nginx  # The container name.
        image: nginx:1.7.9  # The NGINX image and its version.
        ports:
        - name: nginx  # The port name.
          containerPort: 80  # The port exposed by the container.
          protocol: TCP  # The protocol. You can set it to TCP or UDP. Default value: TCP.
        command: ["/bin/sh"]  # The entrypoint of the container.
        args: [ "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY) && exec nginx -g 'daemon off;'"] # Prints variables and starts NGINX.
        stdin: true  # Enables standard input.
        tty: true    # Allocates a pseudo-TTY.
        env:
          - name: SPECIAL_LEVEL_KEY
            valueFrom:
              configMapKeyRef:
                name: special-config  # The name of the ConfigMap.
                key: SPECIAL_LEVEL    # The key in the ConfigMap.
        securityContext:
          privileged: true  # Enables privileged mode if set to true. Default value: false.
        resources:
          limits:
            cpu: "500m"               # The maximum amount of CPU, 500 millicores.
            memory: "256Mi"           # The maximum amount of memory, 256 MiB.
            ephemeral-storage: "1Gi"  # The maximum amount of ephemeral storage, 1 GiB.
          requests:
            cpu: "200m"               # The minimum requested amount of CPU, 200 millicores.
            memory: "128Mi"           # The minimum requested amount of memory, 128 MiB.
            ephemeral-storage: "500Mi" # The minimum requested amount of ephemeral storage, 500 MiB.
        livenessProbe:  # The configuration of the liveness probe.
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:  # The configuration of the readiness probe.
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 10
        volumeMounts:
        - name: tz-config
          mountPath: /etc/localtime
          readOnly: true
      volumes:
      - name: tz-config
        hostPath:
          path: /etc/localtime  # Mounts the /etc/localtime file from the host to the same path in the container.
---
# The Service definition.
apiVersion: v1
kind: Service
metadata:
  name: nginx-test-svc
  namespace: default  # The namespace. Change it based on your requirements.
  labels:
    app: nginx
spec:
  selector:
    app: nginx  # Selects Pods with the specified label.
  ports:
    - port: 80           # The port exposed by the Service in the cluster.
      targetPort: 80     # The container port that the traffic is forwarded to.
      protocol: TCP      # The protocol. Default value: TCP.
  type: ClusterIP        # The type of Service. Default value: ClusterIP (for internal access only).
---
# The Ingress definition.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: default  # The namespace. Change it based on your requirements.
  annotations:
    kubernetes.io/ingress.class: "nginx"  # Specifies the Ingress controller.
    # If you use an Alibaba Cloud SLB Ingress controller, you can add the following annotations:
    # service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "lb-xxxxxxxxxx"
    # service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.spec.s1.small"
spec:
  rules:
    - host: foo.bar.com  # Replace with your domain name.
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-test-svc # The name of the backend Service.
                port:
                  number: 80         # The port of the backend Service.
  tls:  # Optional. Used to enable HTTPS.
    - hosts:
        - foo.bar.com  # Replace with your domain name.
      secretName: tls-secret  # The name of the Secret that contains the TLS certificate.

Referência