当前位置: 首页 > 知识库问答 >
问题:

values.yaml如何选择入口控制器

杜建章
2023-03-14

我有一个k3s(v1.19.3 k3s3)集群,我正在使用“开箱即用”traefik入口控制器

kubectl  get svc -n kube-system 
NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
kube-dns             ClusterIP      10.43.0.10      <none>          53/UDP,53/TCP,9153/TCP       5d16h
metrics-server       ClusterIP      10.43.127.152   <none>          443/TCP                      5d16h
traefik-prometheus   ClusterIP      10.43.73.131    <none>          9100/TCP                     5d16h
traefik              LoadBalancer   10.43.121.125   111.11.11.111   80:32492/TCP,443:31586/TCP   5d16h
kubectl   -n kube-system describe svc traefik
Name:                     traefik
Namespace:                kube-system
Labels:                   app=traefik
                          app.kubernetes.io/managed-by=Helm
                          chart=traefik-1.81.0
                          heritage=Helm
                          release=traefik
Annotations:              meta.helm.sh/release-name: traefik
                          meta.helm.sh/release-namespace: kube-system
Selector:                 app=traefik,release=traefik
Type:                     LoadBalancer
IP:                       10.43.121.125
LoadBalancer Ingress:     111.11.11.111
Port:                     http  80/TCP
TargetPort:               http/TCP
NodePort:                 http  32492/TCP
Endpoints:                10.42.0.6:80
Port:                     https  443/TCP
TargetPort:               https/TCP
NodePort:                 https  31586/TCP
Endpoints:                10.42.0.6:443
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

我找不到如何使用helm图表(例如,这个幽灵图表)来使用这个入口控制器。在我对Helm图表如何工作以及它们实现的目的的理解中,入口模板允许使用不同的入口控制器。这是图表的ingress.yaml

...
kind: Ingress
metadata:
  name: {{ $fullName }}
  labels:
    {{- include "ghost.labels" . | nindent 4 }}
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: {{ $maxSize }}
  {{- with .Values.ingress.annotations }}
    {{- toYaml . | nindent 4 }}
  {{- end }}
...

基于此,我会说我需要编辑values.yaml注释部分以使用traefik而不是默认kubernetes.io/ingress.class: nginx

ingress:
  enabled: true
  annotations: 
    kubernetes.io/ingress.class: traefik  # what should I use?
  hosts:
    - host: some.domain.io
      paths:
        - /
  tls:
    - secretName: chart-example-tls
      hosts:
        - some.domain.io

但是,无论我在注释中尝试什么,helm install都会不断得到

Error: UPGRADE FAILED: failed to create resource: Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1beta1/ingresses?timeout=10s": service "ingress-nginx-controller-admission" not found

就好像赫尔姆在寻找一个Nginx入口控制器,不管怎样。这是图表的一个可能的限制(比如这个)还是我误解了掌舵图的工作方式?如何在此图表的部署中使用默认的traefik入口?

共有2个答案

司徒元明
2023-03-14

您的想法是正确的,例如,在舵图中,您应该能够通过注释正确定义入口。

比如https://github.com/stefanprodan/podinfo/blob/master/charts/podinfo/templates/ingress.yaml

它定义了如下注释:

{{- with .Values.ingress.annotations }}
  annotations:
{{ toYaml . | indent 4 }}

您可以应用特定于traefik的注释,如

  annotations:
        traefik.ingress.kubernetes.io/router.entrypoints: websecure
        traefik.ingress.kubernetes.io/router.tls.certresolver: myresolver
        traefik.ingress.kubernetes.io/router.middlewares: kube-system-traefik-forward-auth@kubernetescrd

在你问题的图表中:https://github.com/groundhog2k/helm-charts/blob/master/charts/ghost/templates/ingress.yaml#L16

注释

nginx.ingress.kubernetes.io/proxy-body-size

是硬编码的。这不应该阻止部署正常工作。您说Helm似乎在“寻找”Nginx ingress控制器,但这不是真的,afaik。赫尔姆什么也没找。此外,除了注释中的特定引用之外,我找不到任何nginx硬编码的内容,值被注释掉了。https://github.com/groundhog2k/helm-charts/blob/master/charts/ghost/values.yaml#L60因此,正确的答案是,您仍然有一个错误的nginx入口部署。

劳灵均
2023-03-14

不,据我所知-您无法为这些图表选择确切的入口控制器。Nginx和Traefik使用相同的端口,因此您必须提前定义正确的入口控制器。

从图表文档中,我看到:

这个图表已经过测试,可以与NGINX入口、证书管理器、等等一起使用

综上所述,我有一个问题|建议:你不想切换到K3s中的NGINX入口控制器吗?

准备好集群的首要任务是让集群没有其他入口控制器,因为这会与当前入口控制器冲突。这是因为NGINX和Traefik都侦听80和443,这会导致相互冲突,所以请确保K3s集群只有一种。

为了获得最佳结果,您的K3s集群必须使用--no-preport-traefik参数安装,这将导致K3s集群仅使用裸容器编排器部署,而没有默认的HTTP后端,即Traefik。

要确保没有安装Traefik控制器,请运行kubectl get deployments-n kube system查看Traefik是否消失。

如果您已经确认Traefik不在那里,那么您可以继续下一部分。

安装NGINX有两种安装NGINX的方法,要么从掌舵图,要么直接使用kubectl apply-f

使用Helm图表,可以在Helm Stable图表中找到NGINX Ingres,如果您的Helm CLI中已经安装了稳定注册表,只需运行Helm install Stable/NGINX Ingres即可。

您还可以使用此处所述的以下配置修改安装。

 类似资料:
  • 我正在构建一个游戏,我想在到之间选择一个随机数,我想让选择一个更高的数字的几率更低。 所以我问了这个问题,根据amit的回答,我写了这样一句话: 输出我在10000次跑步中选择每个数字的次数。 问题是,无论我选择的值是多少,我总是得到相同的输出。 我需要找到一种方法来修复这个算法,以便将影响拾取两个不同值之间的机会比率,而主要思想将保持不变:拾取更高的值将更难。

  • 选择控制器允许用户选择选项。有三种类型:复选框、单选框以及开/关切换。选择控制器使用主题同样的颜色。 复选框 单选按钮 切换开关 复选框 复选框允许用户从一个数据集中选择多个选项。 如果在一个列表中有多个选项,你可以通过使用复选框而不是开/关切换来节省空间。 如果你有一个单选项,不要用复选框,使用开/关切换。 白色主题 黑色主题 白色 开: Swatch 500, 透明度 100% 关: #000

  • 我在宣传单上展示了两个Geojson文件。这两个文件在我的地图上显示良好,但我希望能够有选择器工作在两个层。 如您在这里所见,我选择器仅显示在以下省份:http://bl.ocks.org/renauld94/8493CA671CE8DE63BFAB9FAFD3F3F574/363F40907203CC431DE22E16987669B7BAE13FE8 我如何可以有一个选择器为两层?

  • 我正在设置我的入口控制器、入口类和入口,以在集群外部公开服务。这是全新的集群设置。 我已经使用 nginx 入口控制器设置了 nginx-ingress 控制器 <code>kubectl应用-fhttps://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.0/deploy/static/provider/b

  • 所以我有一个Laravel控制器: 目前,我正在使用artisan(在引擎盖下运行PHP的内置开发Web服务器)运行应用程序: 我想将控制台消息记录到artisan进程的管道中。

  • 新来的。我想知道是否有人可以帮助我区分我可以用来识别入口控制器和通过YAML和服务识别入口的特征。我有一个预先存在的集群,我认为入口控制器可能是通过helm安装的,但我不确定。有没有办法了解helm在安装nginx ingress控制器时使用的yaml?