kubernetes Helm charts and Ingress resources [已关闭]

qlvxas9a  于 12个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(113)

**已关闭。**此问题为not about programming or software development。目前不接受回答。

此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site的主题相关,可以发表评论,说明在何处可以回答此问题。
上个月就关门了。
Improve this question
我对K8还很陌生。
我试图让我的应用程序对外界可见。我已经部署了这个Nginx Ingress控制器与我的应用程序,使用Helm和helmfile,它给了我一个外部IP地址和负载均衡器。
据我所知,我现在需要一个ingress resource来配置路由Map。
我计划使用这个入口资源作为起点。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx-example
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80

字符串
我的应用程序部署在端口80上的单独命名空间中。
我的问题是:我应该把创建资源的yaml放在哪里?
如果可能的话,我想把所有的东西都保存在Helm中,以便更容易地管理配置,所以除非万不得已,我不想使用kubectl

我的helmfile

repositories:
 
- name: stable
  url: https://charts.helm.sh/stable
- name: nginx-stable
  url: https://helm.nginx.com/stable

releases:

  # other apps configured here

  - name: ingress-nginx
    namespace: ingress
    createNamespace: true
    chart: nginx-stable/nginx-ingress
    values:
      - ./ingress/values.yaml
    version: 0.10.4
    installed: true

我的Ingress Controller值.yaml:

---
rbac:
  create: true

serviceAccount:
  create: true
  name: nginx-ingress-public

controller:
  ingressClassResource:
    enabled: true
    default: true

  replicaCount: 3
  minAvailable: 3
  updateStrategy:
    rollingUpdate:
      maxSurge: 3
      maxUnavailable: 0

m3eecexj

m3eecexj1#

您应该只部署一次ingress控制器,因为它可以处理整个集群的 * 所有 * ingress流量。
有时部署多个入口控制器是有意义的,例如我们运行2个入口控制器。1个用于内部流量(私有IP),1个用于外部流量(公共IP)。
一旦你有了它,你只需要告诉你的其他helm版本使用它的ingress类。
ingress manifest通常是你的helm chart的模板。所以你把它放在模板中。如果你做helm create my-app,你会得到一个很好的起点,包括ingress。
一旦你的图表中有了入口模板,你可以像往常一样为这个模板添加一些合理的默认值到图表的values.yaml中。
在部署图表时,您可以使用某些标志来覆盖默认值,即-f--set

oxcyiej7

oxcyiej72#

这是一个使用Ingress的分步指南。

here完整源代码。

第一步:创建 Helm 图

helm create test-app-api

字符串

第二步:安装Ingress控制器

这个命令负责安装它。Reference

helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace


将部署一个pod,您可以检查:

kubectl -n ingress-nginx get pod -o yaml


您需要从这个控制器中获取的信息是ingressClassName,您将把它放在values.yaml文件中,最终将其转换为ingress.yaml文件。
通过运行以下命令查找控制器的ingressClassNamekubectl get ingressclasses或通过K8 Jmeter 板查找它。

命令方式:


的数据

** Jmeter 板方式:**


第三步:更新values.yaml中的ingress段

test-app-api: 
  # Other settings ...
  ingress:
    enabled: true
    className: nginx   # <--- ADD THIS GUY
    annotations:
      # Reference: https://kubernetes.github.io/ingress-nginx/examples/rewrite/
      nginx.ingress.kubernetes.io/use-regex: "true"
      nginx.ingress.kubernetes.io/rewrite-target: /$2
    hosts:
      - host: chart-example.local
        paths:
          - path: /my-test-app(/|$)(.*)
            pathType: ImplementationSpecific
  # Other settings...

第四步:部署

helm upgrade --install test-app-release . \
--namespace=local \
--set test-app-api.image.tag="0.1.0" \
--create-namespace \
--debug \
--dry-run


进行一次试运行以检查清单,如果一切正常,则运行不带--dry-run标志的命令。

第五步:更新主机文件

检查您部署的入口,查看分配给主机的地址,因为您将使用该地址更新主机文件。

kubectl get ingress -n local

在控制器日志中也可以看到:

W1119 05:14:31.194021       7 controller.go:1214] Service "local/test-app-release-test-app-api" does not have any active Endpoint.
I1119 05:15:19.437846       7 status.go:304] "updating Ingress status" namespace="local" ingress="test-app-release-test-app-api" currentValue=null newValue=[{"hostname":"localhost"}]


现在将这个Map添加到主机文件中(我在mac上使用Vim编辑主机文件)。

sudo vim /etc/hosts


在主机文件的底部输入服务器IP地址,后跟一个空格,然后输入域名。



保存并使用:wq退出。

第六步:测试APP

现在,您应该能够从集群外部访问应用程序。
例如:http://chart-example.local/my-test-app/weatherforecast


相关问题