Configure nomes de domínio com endereços IP estáticos

Este tutorial demonstra como usar o Google Kubernetes Engine (GKE) para expor a sua aplicação Web à Internet num endereço IP externo estático e configurar um nome de domínio para apontar para a sua aplicação.

Este tutorial pressupõe que tem um nome de domínio registado, como example.com.

Implemente a sua aplicação Web

O manifesto seguinte descreve uma implementação que executa uma imagem de contentor de aplicação Web de exemplo:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
      tier: web
  template:
    metadata:
      labels:
        app: hello
        tier: web
    spec:
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: 200m

Crie a implementação:

kubectl apply -f helloweb-deployment.yaml

Exponha a sua aplicação

Pode expor a sua aplicação no GKE através de qualquer um dos seguintes métodos:

Para saber mais acerca das vantagens e desvantagens de cada método, consulte Configurar um Application Load Balancer externo com o Ingress.

Utilize um serviço

Para garantir que a sua aplicação tem um endereço IP externo estático, tem de reservar um endereço IP estático.

Se optar por expor a sua aplicação através de um serviço, tem de criar um endereço IP regional. Os endereços IP globais só funcionam com o tipo de recurso de entrada, conforme explicado na secção seguinte.

Para usar um serviço, crie um endereço IP estático denominado helloweb-ip na região us-central1:

gcloud

gcloud compute addresses create helloweb-ip --region us-central1

Encontre o endereço IP estático que criou:

gcloud compute addresses describe helloweb-ip --region us-central1

O resultado é semelhante ao seguinte:

...
address: 203.0.113.32
...

Config Connector

Nota: este passo requer o Config Connector. Siga as instruções de instalação para instalar o Config Connector no seu cluster.

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: us-central1

Guarde o manifesto como compute-address-regional.yaml.

Aplique o manifesto ao cluster:

  kubectl apply -f compute-address-regional.yaml

Encontre o endereço IP estático que criou:

  kubectl get computeaddress helloweb-ip -o jsonpath='{.spec.address}'

O manifesto seguinte descreve um serviço do tipo LoadBalancer, que cria um Network Load Balancer de encaminhamento externo para expor pods com um endereço IP externo.

Substitua YOUR.IP.ADDRESS.HERE pelo endereço IP estático:

apiVersion: v1
kind: Service
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    app: hello
    tier: web
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer
  loadBalancerIP: "YOUR.IP.ADDRESS.HERE"

Crie o serviço:

kubectl apply -f helloweb-service-static-ip.yaml

Veja o endereço IP reservado associado ao equilibrador de carga:

kubectl get service

O resultado é semelhante ao seguinte:

NAME               CLUSTER-IP      EXTERNAL-IP      PORT(S)          AGE
helloweb           10.31.254.176   203.0.113.32     80:30690/TCP     54s

Use um Ingress

Se optar por expor a sua aplicação através de um Ingress, tem de reservar um endereço IP estático global. Use a anotação kubernetes.io/ingress.global-static-ip-name para especificar um endereço IP global.

Para expor a sua aplicação a clientes e serviços numa região, use um endereço IP interno estático regional ao implementar um recurso de entrada interno para o GKE, juntamente com as anotações necessárias.

Para saber como usar o Ingress para expor as suas aplicações à Internet, consulte o artigo Configurar um equilibrador de carga de aplicações externo com o Ingress.

Para criar um endereço IP estático global com o nome helloweb-ip:

gcloud

gcloud compute addresses create helloweb-ip --global

Encontre o endereço IP estático que criou:

gcloud compute addresses describe helloweb-ip --global

O resultado é semelhante ao seguinte:

...
address: 203.0.113.32
...

Config Connector

Nota: este passo requer o Config Connector. Siga as instruções de instalação para instalar o Config Connector no seu cluster.

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: global

Guarde o manifesto como compute-address-global.yaml.

Aplique o manifesto ao cluster:

  kubectl apply -f compute-address-global.yaml

O manifesto seguinte descreve um Ingress que expõe uma aplicação Web num IP estático com dois recursos:

  • Service com type:NodePort
  • Um Ingress configurado com o nome do serviço e a anotação de IP estático
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: helloweb
  annotations:
    kubernetes.io/ingress.global-static-ip-name: helloweb-ip
  labels:
    app: hello
spec:
  defaultBackend:
    service:
      name: helloweb-backend
      port:
        number: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: helloweb-backend
  labels:
    app: hello
spec:
  type: NodePort
  selector:
    app: hello
    tier: web
  ports:
  - port: 8080
    targetPort: 8080

A anotação kubernetes.io/ingress.global-static-ip-name especifica o nome do recurso de endereço IP global a associar ao balanceador de carga.

Aplique o manifesto ao cluster:

kubectl apply -f helloweb-ingress-static-ip.yaml

Veja o endereço IP associado ao equilibrador de carga:

kubectl get ingress

O resultado é semelhante ao seguinte

NAME       HOSTS     ADDRESS          PORTS     AGE
helloweb   *         203.0.113.32     80        4m

Veja o seu endereço IP estático reservado

Para verificar se o balanceador de carga está configurado corretamente, pode usar um navegador de Internet para visitar o endereço IP ou usar curl:

curl http://203.0.113.32/

O resultado é semelhante ao seguinte:

Hello, world!
Hostname: helloweb-3766687455-8lvqv

Configure os registos do nome de domínio

Para que os navegadores que consultam o seu nome de domínio, como example.com, ou o nome do subdomínio, como blog.example.com, apontem para o endereço IP estático que reservou, tem de atualizar os registos DNS (servidor de nomes de domínio) do seu nome de domínio.

Tem de criar um registo DNS do tipo A (Endereço) para o nome do seu domínio ou subdomínio e ter o respetivo valor configurado com o endereço IP reservado

Os registos DNS do seu domínio são geridos pelo seu servidor de nomes. O seu servidor de nomes pode ser a "entidade de registo" onde registou o seu domínio, um serviço DNS, como o Cloud DNS, ou outro fornecedor de terceiros.

  • Se o seu servidor de nomes for o Cloud DNS: siga o guia de início rápido do Cloud DNS para configurar o registo A de DNS para o seu nome de domínio com o endereço IP reservado da sua aplicação.

  • Se o seu servidor de nomes for outro fornecedor: consulte a documentação do seu fornecedor de DNS sobre a definição de registos A de DNS para configurar o seu nome de domínio. Se optar por usar o Cloud DNS, consulte o artigo Migrar para o Cloud DNS.

Visite o nome do seu domínio

Para verificar se os registos A de DNS do nome do seu domínio são resolvidos para o endereço IP que reservou, visite o nome do seu domínio.

Para fazer uma consulta de DNS para o registo A do nome do domínio, execute o comando host:

host example.com

O resultado é semelhante ao seguinte:

example.com has address 203.0.113.32

Agora, pode direcionar o navegador de Internet para o nome do domínio e visitar o seu Website.