无法通过 Helm 为 QuestDB 设置 Kubernetes Ingress
Unable to setup Kubernetes Ingress for QuestDB via Helm
我是 Kubernetes、Helm 和 Yaml 的初学者。我正在尝试通过我的 minikube 中的 Kubernetes Ingress Controller 设置访问 QuestDB 控制台,但是在 运行 helm 升级时出现以下错误。谁能建议我如何纠正这个问题?
Error: UPGRADE FAILED: failed to create resource: Ingress.extensions "questdb" is invalid: spec: Invalid value: []networking.IngressRule(nil): either `defaultBackend` or `rules` must be specified
这是我的重写 value.yaml
ingress:
enabled: true
rules:
- host: localhost
http:
paths:
- path: /questdb
backend:
serviceName: questdb-headless
servicePort: 9000
- path: /influxdb
backend:
serviceName: questdb-headless
servicePort: 9009
我已经使用本地版本安装了 QuestDB helm chart,它只稍微修改了原始 ingress.yaml 以引用 networking.k8s。io/v1 而不是 networking.k8s。io/v1beta1。这是当地的情况:
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "questdb.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1
{{- else -}}
apiVersion: extensions/v1
{{- end }}
kind: Ingress
metadata:
name: {{ $fullName }}
labels:
{{- include "questdb.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ . }}
backend:
serviceName: {{ $fullName }}
servicePort: {{ $svcPort }}
{{- end }}
{{- end }}
{{- end }}
我在这些版本上 运行:
- helm : v3.6.0
- Kubernetes :
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-13T13:23:52Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:20:00Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
NAME NAMESPACE CHART APP VERSION
kubernetes-ingress default kubernetes-ingress-1.15.2 1.6.2
questdb default questdb-0.8.0 6.0.3
可在此处找到有关原始图表和模板的更多详细信息:https://github.com/questdb/questdb-kubernetes/tree/master/charts/questdb
Ingress 模板希望事情保持在 .Values.ingress.hosts
以下,但您的值低于 .Values.ingress.rules
。
此外,路径需要直接保留在主机项目下,而不是在 http 下,因为入口正在使用它
{{- range .paths }}
在 .Values.ingress.hosts
项下。而且,路径只是字符串,因为服务名称和端口直接取自 fullname
和 .Values.service.port
我会尝试将您的值更改为:
ingress:
enabled: true
hosts:
- host: localhost
paths:
- "/questdb"
- "/influxdb"
或类似的东西。
此外,如果您添加参数 --debug --dry-run
,您可以尝试查看 helm upgrade 或 install 命令的输出,这可以极大地帮助您识别此类问题,显示它们的定义创建(当然,如果在构建模板时没有错误)
更新:由于您还更改了 Ingress 模板以使用 networking.k8s.io/v1
,您还需要更改模板的创建方式,因为新类型的 Ingress 需要正如您在文档中看到的那样,事情以不同的方式进行:https://kubernetes.io/docs/concepts/services-networking/ingress/
规则可以变成这样:
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
backend:
service:
name: {{ .svc }}
port:
number: {{ .port }}
{{- end }}
{{- end }}
并删除
的声明
{{- $fullName := include "questdb.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
现在没用了。有了这个,您可以更改以下值:
ingress:
enabled: true
hosts:
- host: localhost
paths:
- path: "/questdb"
svc: questdb-headless
port: 9000
- path: "/influxdb"
svc: questdb-headless
port: 9009
但是您在值中指定的服务当然必须在某个地方创建(通过入口,它需要公开所需的端口)
我是 Kubernetes、Helm 和 Yaml 的初学者。我正在尝试通过我的 minikube 中的 Kubernetes Ingress Controller 设置访问 QuestDB 控制台,但是在 运行 helm 升级时出现以下错误。谁能建议我如何纠正这个问题?
Error: UPGRADE FAILED: failed to create resource: Ingress.extensions "questdb" is invalid: spec: Invalid value: []networking.IngressRule(nil): either `defaultBackend` or `rules` must be specified
这是我的重写 value.yaml
ingress:
enabled: true
rules:
- host: localhost
http:
paths:
- path: /questdb
backend:
serviceName: questdb-headless
servicePort: 9000
- path: /influxdb
backend:
serviceName: questdb-headless
servicePort: 9009
我已经使用本地版本安装了 QuestDB helm chart,它只稍微修改了原始 ingress.yaml 以引用 networking.k8s。io/v1 而不是 networking.k8s。io/v1beta1。这是当地的情况:
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "questdb.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1
{{- else -}}
apiVersion: extensions/v1
{{- end }}
kind: Ingress
metadata:
name: {{ $fullName }}
labels:
{{- include "questdb.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ . }}
backend:
serviceName: {{ $fullName }}
servicePort: {{ $svcPort }}
{{- end }}
{{- end }}
{{- end }}
我在这些版本上 运行:
- helm : v3.6.0
- Kubernetes :
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-13T13:23:52Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:20:00Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
NAME NAMESPACE CHART APP VERSION
kubernetes-ingress default kubernetes-ingress-1.15.2 1.6.2
questdb default questdb-0.8.0 6.0.3
可在此处找到有关原始图表和模板的更多详细信息:https://github.com/questdb/questdb-kubernetes/tree/master/charts/questdb
Ingress 模板希望事情保持在 .Values.ingress.hosts
以下,但您的值低于 .Values.ingress.rules
。
此外,路径需要直接保留在主机项目下,而不是在 http 下,因为入口正在使用它
{{- range .paths }}
在 .Values.ingress.hosts
项下。而且,路径只是字符串,因为服务名称和端口直接取自 fullname
和 .Values.service.port
我会尝试将您的值更改为:
ingress:
enabled: true
hosts:
- host: localhost
paths:
- "/questdb"
- "/influxdb"
或类似的东西。
此外,如果您添加参数 --debug --dry-run
,您可以尝试查看 helm upgrade 或 install 命令的输出,这可以极大地帮助您识别此类问题,显示它们的定义创建(当然,如果在构建模板时没有错误)
更新:由于您还更改了 Ingress 模板以使用 networking.k8s.io/v1
,您还需要更改模板的创建方式,因为新类型的 Ingress 需要正如您在文档中看到的那样,事情以不同的方式进行:https://kubernetes.io/docs/concepts/services-networking/ingress/
规则可以变成这样:
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
backend:
service:
name: {{ .svc }}
port:
number: {{ .port }}
{{- end }}
{{- end }}
并删除
的声明{{- $fullName := include "questdb.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
现在没用了。有了这个,您可以更改以下值:
ingress:
enabled: true
hosts:
- host: localhost
paths:
- path: "/questdb"
svc: questdb-headless
port: 9000
- path: "/influxdb"
svc: questdb-headless
port: 9009
但是您在值中指定的服务当然必须在某个地方创建(通过入口,它需要公开所需的端口)