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.