Назад | Перейти на главную страницу

Какое значение я должен использовать для host во входном манифесте kubernetes?

У меня есть этот ямл для 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, чтобы он был доступен на определенном порту на всех хостах. Я бы порекомендовал сделать это, а затем использовать внешний балансировщик нагрузки / прокси, чтобы попасть на входящий хост-порт на всех узлах.