Kubernetes Dashboard tries to parse HTML as JSON for failed K8s API queries
Problem
"Something" in the Kubernetes Dashboard tries to parse HTML responses as JSON.
For example, HTML (or potentially even other non-JSON content types) is returned if a proxy fails to reach an upstream Rails (well, actually KAS, but on some setup technically on the Rails nodes) server and therefore returns a 502 BAD GATEWAY
with some HTML body.
The error appears on the UI like this:
Proposal
The API client should check the content type before trying to parse it as JSON (application/json
) - it may even only consider certain status codes and return opinionated messages for some of them.
Use copy:
There was a problem fetching cluster information. Refresh the page and try again.
Files of interest
app/assets/javascripts/environments/graphql/resolvers/kubernetes.js
app/assets/javascripts/kubernetes_dashboard/graphql/helpers/resolver_helpers.js
The components showing data from the cluster are using client graphql queries that use REST api calls implemented in app/assets/javascripts/environments/graphql/resolvers/kubernetes.js
in k8sPods
and k8sServices
functions. Both of the calls utilise handleClusterError
helper located in app/assets/javascripts/kubernetes_dashboard/graphql/helpers/resolver_helpers.js
I suggest adding the logic checking for response code in this helper and throw a more friendly error further.