Потеряна моя консоль openshift («Приложение недоступно»)

#oauth #openshift

#oauth #openshift

Вопрос:

Пользовательский интерфейс консоли в моей установке OpenShift 4.5.x таинственным образом перестал работать. Посещение URL-адреса консоли теперь приводит к появлению сообщения:

Приложение недоступно

В настоящее время приложение не обслуживает запросы в этой конечной точке. Возможно, он не был запущен или все еще запускается.

Обычно это видно, если маршрут существует, но не может найти соответствующую службу или модуль, но в этом случае маршрут существует:

 $ oc -n openshift-console get route
NAME        HOST/PORT                                             PATH   SERVICES    PORT    TERMINATION          WILDCARD
console     console-openshift-console.apps.example.com            console     https   reencrypt/Redirect   None
downloads   downloads-openshift-console.apps.example.com          downloads   http    edge/Redirect        None
 

Служба существует:

 $ oc -n openshift-console get service
NAME        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
console     ClusterIP   172.30.36.70     <none>        443/TCP   57d
downloads   ClusterIP   172.30.190.186   <none>        80/TCP    57d
 

И модули существуют и исправны:

 $ oc -n openshift-console get pods
NAME                       READY   STATUS    RESTARTS   AGE
console-76c8d7d755-gtfm8   0/1     Running   1          4m12s
console-76c8d7d755-mvf6n   0/1     Running   1          4m12s
downloads-9656c996-mmqhk   1/1     Running   0          53d
downloads-9656c996-z2khj   1/1     Running   0          53d
 

Просматривая журналы для консольных модулей, похоже, возникла проблема с обращением к службе oauth:

 2021-01-04T22:05:48Z auth: error contacting auth provider (retrying in 10s): Get https://kubernetes.default.svc/.well-known/oauth-authorization-server: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
2021-01-04T22:05:58Z auth: error contacting auth provider (retrying in 10s): request to OAuth issuer endpoint https://oauth-openshift.apps.example.com/oauth/token failed: Head https://oauth-openshift.apps.example.com: EOF
2021-01-04T22:06:13Z auth: error contacting auth provider (retrying in 10s): request to OAuth issuer endpoint https://oauth-openshift.apps.example.com/oauth/token failed: Head https://oauth-openshift.apps.example.com: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
2021-01-04T22:06:23Z auth: error contacting auth provider (retrying in 10s): request to OAuth issuer endpoint https://oauth-openshift.apps.example.com/oauth/token failed: Head https://oauth-openshift.apps.example.com: EOF
2021-01-04T22:06:38Z auth: error contacting auth provider (retrying in 10s): request to OAuth issuer endpoint https://oauth-openshift.apps.example.com/oauth/token failed: Head https://oauth-openshift.apps.example.com: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
2021-01-04T22:06:53Z auth: error contacting auth provider (retrying in 10s): request to OAuth issuer endpoint https://oauth-openshift.apps.example.com/oauth/token failed: Head https://oauth-openshift.apps.example.com: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
 

Но модули в openshift-authentication пространстве имен выглядят исправными и не сообщают о каких-либо ошибках в журналах. Где я должен искать источник проблемы?


Ожидаемый маршрут и служба существуют в openshift-authentication пространстве имен:

 $ oc -n openshift-authentication get route
NAME              HOST/PORT                                 PATH   SERVICES          PORT   TERMINATION            WILDCARD
oauth-openshift   oauth-openshift.apps.example.com          oauth-openshift   6443   passthrough/Redirect   None

$ oc -n openshift-authentication get service
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
oauth-openshift   ClusterIP   172.30.233.202   <none>        443/TCP   57d

$ oc -n openshift-authentication get route oauth-openshift -o json | jq .status
{
  "ingress": [
    {
      "conditions": [
        {
          "lastTransitionTime": "2020-11-08T19:48:08Z",
          "status": "True",
          "type": "Admitted"
        }
      ],
      "host": "oauth-openshift.apps.example.com",
      "routerCanonicalHostname": "apps.example.com",
      "routerName": "default",
      "wildcardPolicy": "None"
    }
  ]
}
 

Комментарии:

1. Похоже, что ваша конечная точка-эмитент OAuth работает не так, как ожидалось. https://oauth-openshift.apps.example.com Существует ли маршрут в вашем кластере? Существует ли служба? Можете ли вы добавить этот вывод к своему вопросу?

2. @simon Я обновил вопрос; сервис и маршрут существуют и, насколько я могу судить, выглядят нормально.

3. Спасибо, пока все хорошо. Проверьте, можете ли вы достичь » oauth-openshift.apps.example.com/oauth/token » извне (с помощью curl или аналогично). Если это так, возможно, модули консоли используют какой-то прокси для подключения к этой конечной точке? Трудно сказать.

4. Попытка получить curl URL-адрес извне кластера приводит curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to oauth-openshift.apps.example.com:443 к.

Ответ №1:

Оказалось, что это проблема с входными маршрутизаторами по умолчанию. Очевидных ошибок не было, но я смог решить проблему, перезапустив маршрутизаторы:

 oc -n openshift-ingress get pod -o json |
  jq -r '.items[].metadata.name' |
  xargs oc -n openshift-ingress delete pod
 

Ответ №2:

у меня была такая же проблема в OpenShift 3.11

я только что удалил секрет с сертификатом, openshift создаст новый секрет, теперь консоль работает.

 oc delete secret console-serving-cert -n openshift-console