Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

22
respostas

Não consigo acesso a url servico-aplicacao

ao digitar o comando para obeter o IP do serviço tem essa saída:

drito@Lenovo-r7:~/kubernetes$ minikube service servico-aplicacao --url
http://172.17.0.2:32260

Não está gerando um IP da rede do host como esperado.

22 respostas

Olá Wanderson, tudo bem? Como está o seu cenário? Você está usando o minikube? Porque esse IP me parece ser do Docker. Poderia explicar melhor pra gente entender e ti responder da melhor forma possível!

Opa, Jonilson, td bem e vc? Sim, estou utilizando o minikube através dos comandos com kubectl igual nos vídeos.

No final dessa aula (https://cursos.alura.com.br/course/kubernetes/task/30135), é usado esse comando para exibir um IP para acessível pelo navegador.

No entanto a saída do meu foi um ip da rede dos PODS.

Segue meu arquivo: deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: aplicacao-deployment
  labels:
    app: aplicacao
spec:
  replicas: 1
  selector:
    matchLabels:
      app: aplicacao
  template:
    metadata:
      labels:
       app: aplicacao
    spec:
      containers:
      - name: container-aplicacao-loja
        image: rafanercessian/aplicacao-loja:v1
        ports:
          - containerPort: 80

e meu arquivo servico-aplicacao.yaml

apiVersion: v1
kind: Service
metadata:
  name: servico-aplicacao
spec:
  type: LoadBalancer
  ports:
    - port: 80
  selector:
    name: aplicacao

Ao verificar os services rodando apresenta essa mensagem de em external-IP...

drito@Lenovo-r7:~/kubernetes$ kubectl get services
NAME                TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes          ClusterIP      10.96.0.1       <none>        443/TCP        42h
servico-aplicacao   LoadBalancer   10.100.161.46   <pending>     80:32741/TCP   5s

Achei algo nesse link: https://github.com/knative/serving/blob/b31d96e03bfa1752031d0bc4ae2a3a00744d6cd5/docs/creating-a-kubernetes-cluster.md#loadbalancer-support-in-minikube

Informa que com essas linhas resolveria o problema do minikube

sudo ip route add $(cat ~/.minikube/profiles/minikube/config.json | jq -r ".KubernetesConfig.ServiceCIDR") via $(minikube ip)
kubectl run minikube-lb-patch --replicas=1 --image=elsonrodriguez/minikube-lb-patch:0.1 --namespace=kube-system

Dá uma olhada se é isso mesmo.

É me parece uma boa alternativa, você já tentou executar?

Bom dia, ainda não, tava esperando alguma resposta de vcs kkkk

deletei o serviço e fiz subi novamente, ele mudou o status "pending", mas entregou o mesmo IP da rede cluster, continua inacessível.

drito@Lenovo-r7:~/kubernetes$ kubectl get services
NAME                TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes          ClusterIP      10.96.0.1     <none>        443/TCP        2d9h
servico-aplicacao   LoadBalancer   10.98.171.8   10.98.171.8   80:32408/TCP   21m

e a saída do comando --url é essa:

drito@Lenovo-r7:~/kubernetes$ minikube service servico-aplicacao --url
http://172.17.0.2:32408

Wanderson, você poderia deletar o serviço servico-aplicacao, para isso você pode usar o comando:

kubectl delete service servico-aplicacao

E também deletar o deployment aplicacao-deployment dessa forma:

kubectl delete deployment.apps/aplicacao-deployment

E colocar o seguinte conteúdos nos arquivos:

  • deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: aplicacao-deployment
    spec:
    selector:
      matchLabels:
        name: aplicacao-pod
    template:
      metadata:
        labels:
          name: aplicacao-pod
      spec:
        containers:
          - name: container-aplicacao-loja
            image: rafanercessian/aplicacao-loja:v1
            ports:
              - containerPort: 80
  • servico-aplicacao.yaml

    apiVersion: v1
    kind: Service
    metadata:
    name: servico-aplicacao
    spec:
    type: LoadBalancer
    ports:
      - port: 80
    selector:
      name: aplicacao-pod

E depois executar novamente:

kubectl create -f deployment.yml
kubectl create -f servico-aplicacao.yml

E por último executar o comando:

minikube service servico-aplicacao --url

E fala pra gente o resultado!

Retorna isso:

drito@Lenovo-r7:~/kubernetes$ kubectl create -f deployment.yaml
error: error validating "deployment.yaml": error validating data: [ValidationError(Deployment): unknown field "name" in io.k8s.api.apps.v1.Deployment, ValidationError(Deployment): unknown field "selector" in io.k8s.api.apps.v1.Deployment, ValidationError(Deployment): unknown field "template" in io.k8s.api.apps.v1.Deployment]; if you choose to ignore these errors, turn validation off with --validate=false

Estou exatamente com o mesmo problema, durante o curso vi qua alguns arquivos não estão totalmente atualizados, e que ao fazer os exercícios geram dúvidas para novatos como eu. Aguardando a resposta pra este tópico também.

Wanderson e Felipe, qual a versões do Kubernetes e do minikube vocês estão utilizando? Estou utilizando o minikube na v1.6.2 no Ubuntu 18.04, e o Kubernetes v1.17.0 e o Docker na versão '19.03.5', e os passos que mencionei no post anterior, outra coisa, vocês poderiam colocar aqui como está os arquivos deployment.yaml e também servico-aplicacao.yaml porque geralmente esse erro de validação acontece por algum erro na indentação do código, já que arquivo yaml são muito rigorosos nessa questão.

E segue novamente o conteúdo dos arquivos:

  • deployment.yaml:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: aplicacao-deployment
    spec:
    selector:
      matchLabels:
        name: aplicacao-pod
    template:
      metadata:
        labels:
          name: aplicacao-pod
      spec:
        containers:
          - name: container-aplicacao-loja
            image: rafanercessian/aplicacao-loja:v1
            ports:
              - containerPort: 80
  • servico-aplicacao.yaml:
    apiVersion: v1
    kind: Service
    metadata:
    name: servico-aplicacao
    spec:
    type: LoadBalancer
    ports:
      - port: 80
    selector:
      name: aplicacao-pod

Observação: Estou usando o espaçamento com 2 espaços, então todo o arquivo precisa ter a indentação com 2 espaços!

Fazendo o descrito nessa outra dúvida funcionou pra mim, segue link https://cursos.alura.com.br/forum/topico-kubernetes-servico-aplicacao-96373

Jonilson,

Testei com o teu código e funcionou, com um pequeno problema de indentação facilmente corrigido.

Jonilson, mesmo usando esse seu código, continua sem gerar IP externo.

Formatei meu notebook ontem pra fazer Dual, e subi todo o ambiente do zero, e continua sem gerar IP externo.

drito@Lenovo-r7:~/kubernetes1$ kubectl get services
NAME                TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes          ClusterIP      10.96.0.1       <none>        443/TCP        20h
servico-aplicacao   LoadBalancer   10.98.246.215   <pending>     80:32600/TCP   8s

Rodrigo, tentei com expose igual vc diz no outro tópico e deu a mesma coisa também...

drito@Lenovo-r7:~/kubernetes1$ kubectl expose deployment aplicacao-deployment --type=LoadBalancer --name=servico-aplicacaoservice/servico-aplicacao exposed
drito@Lenovo-r7:~/kubernetes1$ kubectl get services
NAME                TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes          ClusterIP      10.96.0.1       <none>        443/TCP        20h
servico-aplicacao   LoadBalancer   10.98.246.215   <pending>     80:32600/TCP   8s
drito@Lenovo-r7:~/kubernetes1$ minikube service servico-aplicacao --url
http://172.17.0.2:32600

Segue abaixo versões utilizadas:

Linux Mint 19.3 Cinnamon

drito@Lenovo-r7:~/kubernetes1$ minikube version
minikube version: v1.9.2

drito@Lenovo-r7:~/kubernetes1$ docker -v
Docker version 19.03.8, build afacb8b7f0

drito@Lenovo-r7:~/kubernetes1$ kubectl version  --short | grep -i server
Server Version: v1.18.0

O meu é um Ubuntu 18.04.4 LTS

minikube version: v1.9.2 // Docker version 19.03.8, build afacb8b7f0 // Server Version: v1.18.0 //

Wanderson, tenta copiar e colar exatamente os códigos:

  • deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: aplicacao-deployment
spec:
  selector:
    matchLabels:
      name: aplicacao-pod
  template:
    metadata:
      labels:
        name: aplicacao-pod
    spec:
      containers:
        - name: container-aplicacao-loja
          image: rafanercessian/aplicacao-loja:v1
          ports:
            - containerPort: 80
  • servico-aplicacao.yaml:
apiVersion: v1
kind: Service
metadata:
  name: servico-aplicacao
spec:
  type: LoadBalancer
  ports:
    - port: 80
  selector:
    name: aplicacao-pod

E depois executar os comando novamente:

kubectl delete deployment --all
kubectl delete service --all
kubectl create -f deployment.yaml
kubectl create -f servico-aplicacao.yaml

E por último tenta encontrar o IP novamente:

minikube service servico-aplicacao --url

E fala pra gente o resultado!

Jonilson, o meu código já está igual. Não é erro no código e sim algo que mudou nas versões mais atuais, pelo que andei lendo o LoadBalancer não vem com a opção de IP externo por padrão atualmente.

Cheguei a ler por alto sobre o projeto METALLB (https://metallb.universe.tf/), mas n tive tempo de aprender a usar.

A questão é que os 2 cursos de Kubernetes aqui na Alura estão com conteúdo das versões antigas e as instruções de uso das ferramentas nas versões atuais não estão batendo.

Exatamento o que eu já apontei, os cursos estão com códigos desatualizados, e nem o suporte consegue, você Jonilson inclusive está me ajudando em outra dúvida, que eu tinha marcado como resolvido, porém o statefulset deu erro após a sua ajuda, acho que o curso não é ruim, mas necessita de revisão, urgente, a licença da Alura nem de perto é das mais baratas, e problemas minisculos como esse dão uma sensação horrível de incapacidade, estamos aprendendo, e solucionar coisas desse tipo são frustrantes.