У меня есть этот ямл для 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:
- {}
В приведенном выше я установил ...
- host: ifs-alpha-kube-001.example.com
Этот хост оказался одним из моих узлов. У меня три узла. Я почти уверен, что это неверно. Вход работает, но если я отключу ifs-alpha-kube-001, вход перестанет работать. Что я должен установить host
если мне нужен кластер высокой доступности?
Спасибо
Обновление: я попробовал предложение duct_tape_coder, но я все еще должен делать что-то не так.
Мне нужно иметь доступ к веб-серверам через порт 80 и 443, поэтому я создаю два входа «единой службы».
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: port-80-ingress
namespace: ingress-controller
spec:
backend:
serviceName: port-80-service
servicePort: 80
... и ...
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: port-443-ingress
namespace: ingress-controller
spec:
backend:
serviceName: port-443-service
servicePort: 443
И удалил свой старый вход. Но я все еще могу получить доступ к веб-серверу только на моем первом узле, ifs-alpha-kube-001, а не ifs-alpha-kube-002 и ifs-alpha-kube-003. Я убедился, что мой веб-сервер работает на модулях.
Обновление II:
Хорошо, я попробовал это вместо этого:
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
И удалил все остальные входы. Но все же я могу получить доступ к http на хосте ifs-alpha-kube-001 только со странным поворотом ... если я выполню:
curl -L --insecure https://ifs-alpha-kube-001.example.com -vvvv
Я получаю массу сообщений о перенаправлении.
> 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
Что здесь происходит?
Обновление III
Вот настроенные мной службы:
$ 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
Я считаю, что привязал service-nodeport
служение моему входу app2
.
Не устанавливайте хост, и он будет доступен на всех хостах, https://kubernetes.io/docs/concepts/services-networking/ingress/. Вы также можете назначить hostPort, чтобы он был доступен на определенном порту на всех хостах. Я бы порекомендовал сделать это, а затем использовать внешний балансировщик нагрузки / прокси, чтобы попасть на входящий хост-порт на всех узлах.