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.
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.
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:
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
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:
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
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.