140 lines
4.8 KiB
Markdown
140 lines
4.8 KiB
Markdown
---
|
||
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) |