wiki-js/DevOps/Helm/Learn-by-Krukov/04-video-svc-ingress.md

140 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: 04-video-svc-ingress
description:
published: true
date: 2023-11-09T14:58:58.607Z
tags:
editor: markdown
dateCreated: 2023-11-09T14:11:37.963Z
---
# Видео четыре
> Файлы для лабы:
[04-video-svc-ingress.zip](/attachments/04-video-svc-ingress.zip)
## Service
В файле values.yaml переносим (добавляем) строки:
```yaml
service:
# Service type: ClusterIP or NodePort
type: ClusterIP
port: 80
# Если сервис типа NodePort
nodePort: ""
# Если необходимо, определите имя порта
name: ""
```
Предполагается, что наш чарт будет поддерживать только
два типа сервисов: CluserIP (по умолчанию) и NodePort.
В фале service.yaml добавляем шаблон.
```yaml
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
```
Так же нам необходимо отработать ситуацию, когда сервиса типа NodePort.
В этом случае следует определить параметр nodePort, в случае, если
он определён. В этом нам поможет следующая конструкция:
```yaml
{{- if and (eq .Values.service.type "NodePort") .Values.service.nodePort }}
nodePort: {{ .Values.service.nodePort }}
{{- end }}
```
В качестве значения оператору if передаётся функция and. Которая проверяет
истинность двух значений:
* eq .Values.service.type "NodePort" - истина, если type равен NodePort.
* .Values.service.nodePort - истина, если значение определено.
Если оба значения истина, то будет подставлен параметр nodePort.
Так же добавим формирование имени порта:
```yaml
{{- if .Values.service.name }}
name: {{ .Values.service.name }}
{{- end }}
```
Добавим в файл my-values.yaml следубщие строки:
```yaml
service:
type: NodePort
nodePort: 31002
name: proxy
```
Проверим создание шаблона.
cd helm/04-video/
helm template app ./openresty-art/ -f my-values.yaml > app.yaml
## Ingress
C ingress поступим просто.
Сначала в values.yaml перенесем всю секцию ingress.
Так же скопируем эту секцию в my-values.yaml и немного её отредактируем.
```yaml
ingress:
enabled: true
className: "system-ingress"
annotations:
certmanager.k8s.io/cluster-issuer: monitoring-issuer
hosts:
- host: application.kryukov.local
paths:
- path: /
pathType: Prefix
tls:
- hosts:
- application
secretName: art-tls
```
А затем просто скопируем ingress-orig.yaml в директорию templates и
назовём его ingress.yaml. Т.е. просто удалим старый ingress.
Поскольку имя сервиса, относительно первоначально сгенерированного шаблона
у нас изменено, добавим несколько дополнений/изменений в файле шаблона.
После второй строки добавим переменную:
```yaml
{{- $svcName := printf "%s-%s" $fullName "svc" -}}
```
В строках номер 53 и 57 заменим $fullName на $svcName.
На этом базовые изменения в шаблоне ingress, шаблон готов к применению.
В этом можно убедиться, создав манифест приложения.
helm template app ./openresty-art/ -f my-values.yaml > app.yaml
Что бы разобраться в шаблоне, выпишем все используемые в нём, ещё
не известный нам функции.
* **semverCompare** - Семантическое сравнение двух строк. Два аргумента -
строки в формате версии. Позволяет сравнить версии приложений.
* **hasKey** - Возвращает истину, если данный словарь содержит данный ключ.
* **set** - Добавляет в словарь новую пару ключ/значение.
## NOTE.txt
Содержимое файла NOTE.txt выводится на стандартный вывод после установки
или обновления чарта (helm install или helm upgrade).
## Видео
[<img src="https://img.youtube.com/vi/dwS21jD7fq0/maxresdefault.jpg" width="50%">](https://youtu.be/dwS21jD7fq0)