kubernetes - 使用单个入口控制器调用多个服务
问题描述
我正在使用 helm 图表来部署不同的服务。我已经参数化了我的图表,所以对于每个服务,我只需传递新的应用程序名称,它就会创建新的服务和相关的东西。
所有这些服务都驻留在不同的命名空间中。
我创建了入口控制器,我想通过为每个服务添加新规则来将其用于所有服务。
我测试了一项服务的部署,它成功运行,但是当我尝试部署剩余的服务时,它给了我错误:
rendered manifests contain a resource that already exists. Unable to continue with install: Ingress "dev-ingress" in namespace "dev" exists and cannot be imported into the current release: invalid ownership metadata; annotation validation error: missing key "meta.helm.sh/release-name": must be set to
我想了解实现这一目标的理想流程。
- 我可以在不同的命名空间和用户一个入口控制器中创建服务吗?
- 如何配置我的参数化 helm 图表以在同一个入口部署服务并创建新规则?
这是我的图表-
服务.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.metadata.name }}-svc
labels:
{{- include "helmcharts.labels" . | nindent 4 }}
spec:
ports:
- name: http
protocol: TCP
port: 80
selector:
{{- include "helmcharts.selectorLabels" . | nindent 4 }}
入口.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: dev-ingress
{{- if .Values.ingress.management.annotations }}
annotations:
{{ toYaml .Values.ingress.management.annotations | indent 4 }}
{{- end }}
spec:
rules:
- http:
paths:
- backend:
serviceName: {{ .Values.metadata.name }}-svc
servicePort: 80
path: /{{ .Values.env.path }}
部署.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.metadata.name }}-deployment
labels:
{{- include "helmcharts.labels" . | nindent 4 }}
spec:
{{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }}
strategy:
type: Recreate
{{- end }}
selector:
matchLabels:
{{- include "helmcharts.selectorLabels" . | nindent 6 }}
template:
metadata:
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "helmcharts.selectorLabels" . | nindent 8 }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "helmcharts.serviceAccountName" . }}
automountServiceAccountToken: false
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
containers:
- name: {{ .Values.env.containerName }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default
.Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: 80
protocol: "TCP"
值.yaml
metadata:
name: #{App-Name}#
env:
name: dev
initial: d
containerName: #{Container-Name}#
path: #{App}#-dev
ingress:
management:
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-hash: "sha1"
解决方案
推荐阅读
- json - Vue - 无法将值从方法属性传递给数据对象
- c++ - 如何通过模块化解决这个问题?
- azure - 用于编辑/添加规则的 Azure 存储 Blob 生命周期管理角色
- scala - 将数据插入到具有更改架构的增量表中
- node.js - rxjs firstValueFrom 从不解析
- android - 将数据动态添加到更多 TextView
- momentjs - moment.js 和 2021 年 10 月奇怪的结果
- angular - Angular Canvas 在事件侦听器处理程序中未定义
- ssl - TLS 错误:TLS 密钥协商未能在 60 秒内发生(检查您的网络连接)
- time-complexity - 用更正的文本识别和替换乱码文本的高效算法