Eu tenho este yaml para um Ingress:
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: app
namespace: ingress-controller
... omitted for brevity ...
spec:
rules:
- host: ifs-alpha-kube-001.example.com
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
serviceName: service-nodeport
servicePort: 80
- path: /
pathType: ImplementationSpecific
backend:
serviceName: service-nodeport
servicePort: 443
status:
loadBalancer:
ingress:
- {}
Acima coloquei...
- host: ifs-alpha-kube-001.example.com
Esse host é um dos meus nós. Eu tenho três nós. Estou bastante certo de que isso está incorreto. A entrada funciona, mas se eu desligar o ifs-alpha-kube-001, a entrada para de funcionar. O que devo definir host
se quiser um cluster de alta disponibilidade?
Obrigado
Atualização: tentei a sugestão do duct_tape_coder, mas ainda devo estar fazendo algo errado.
Eu preciso ser capaz de acessar servidores web nas portas 80 e 443, então eu crio duas entradas de "serviço único".
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: port-80-ingress
namespace: ingress-controller
spec:
backend:
serviceName: port-80-service
servicePort: 80
... e ...
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: port-443-ingress
namespace: ingress-controller
spec:
backend:
serviceName: port-443-service
servicePort: 443
E eu deletei meu ingresso antigo. Mas ainda consigo acessar o servidor da Web no meu primeiro nó, ifs-alpha-kube-001, e não ifs-alpha-kube-002 e ifs-alpha-kube-003. Verifiquei que meu servidor da Web está sendo executado nos pods.
Atualização II:
Ok, eu tentei isso em vez disso:
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: app2
namespace: ingress-controller
... omitted ...
spec:
rules:
- http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
serviceName: service-nodeport
servicePort: 80
- path: /
pathType: ImplementationSpecific
backend:
serviceName: service-nodeport
servicePort: 443
status:
loadBalancer:
ingress:
- {}
$ kubectl describe ingress app2 --namespace=ingress-controller
Name: app2
Namespace: ingress-controller
Address:
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
Host Path Backends
---- ---- --------
*
/ service-nodeport:80 (10.233.119.22:80,10.233.123.33:80,10.233.125.29:80)
/ service-nodeport:443 (10.233.119.22:443,10.233.123.33:443,10.233.125.29:443)
Annotations: Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CREATE 13m ingress-controller Ingress ingress-controller/app2
Normal CREATE 13m ingress-controller Ingress ingress-controller/app2
Normal UPDATE 12m ingress-controller Ingress ingress-controller/app2
Normal UPDATE 12m ingress-controller Ingress ingress-controller/app2
E excluiu todas as outras entradas. Mas ainda assim só consigo acessar http no host ifs-alpha-kube-001 com a estranha reviravolta ... se eu executar:
curl -L --insecure https://ifs-alpha-kube-001.example.com -vvvv
Eu recebo uma tonelada de saída sobre redirecionamento.
> GET / HTTP/2
> Host: ifs-alpha-kube-001
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/2 302
< date: Tue, 23 Jun 2020 15:52:28 GMT
< server: Apache/2.4.39 (Unix) OpenSSL/1.0.2k-fips mod_wsgi/4.7.1 Python/3.6
< location: https://ifs-alpha-kube-001/
< content-length: 211
< content-type: text/html; charset=iso-8859-1
< strict-transport-security: max-age=15768000
<
* Ignoring the response-body
* Connection #1 to host ifs-alpha-kube-001 left intact
* Maximum (50) redirects followed
curl: (47) Maximum (50) redirects followed
* Closing connection 0
* Closing connection 1
O que está acontecendo aqui?
Atualização III
Aqui estão os serviços que configurei:
$ kubectl get service --namespace=ingress-controller -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
haproxy-ingress NodePort 10.233.23.21 <none> 80:30032/TCP,443:30643/TCP,1936:30302/TCP 6d4h run=haproxy-ingress
ingress-default-backend ClusterIP 10.233.5.224 <none> 8080/TCP 6d5h run=ingress-default-backend
service-nodeport NodePort 10.233.3.139 <none> 80:30080/TCP,443:30443/TCP 5d18h k8s-app=test-caasa-httpd,pod-template-hash=7d79794567
Acredito que vinculei o service-nodeport
serviço ao meu ingresso app2
.
Não defina um host e ele estará disponível em todos os hosts, https://kubernetes.io/docs/concepts/services-networking/ingress/ . Você também pode designar um hostPort para que ele esteja disponível em uma porta específica em todos os hosts. Eu recomendaria fazer isso e, em seguida, usar um balanceador de carga/proxy externo para atingir a porta do host de entrada em todos os nós.