Last active
December 23, 2023 11:19
-
-
Save ifgeny87/f7286e09cef4056fa5156f00c92ab9f4 to your computer and use it in GitHub Desktop.
Простое решение для проверки работы ingress в домашнем окружении
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Author: Makarov Evgeny ([email protected]) | |
| # Updated: 2023-12-22 | |
| # | |
| # Конфиг позволяет запустить несколько подов с nginx внутри. | |
| # Каждый nginx будет на запрос корня отвечать именем своего хоста. | |
| # Отдельный под с ubuntu будет выполнять запрос к подам с nginx каждые 5 секунд и логировать результат. | |
| # Задача конфига показать как работает Service. | |
| # | |
| # | |
| # Флоу: | |
| # 1. Деплой запускает поды с контейнером nginx внутри. | |
| # 2. При запуске контейнер подменяет index.html и пишет в него имя хоста. | |
| # 3. Под nginx-test устанавливает curl и запускает бесконечный цикл с логом результата запроса. | |
| # 4. Запросы curl выполняет по имени сервиса. | |
| # | |
| # | |
| # Подготовка: | |
| # Нужно установить Ingress Controller. Например для Google Cloud: | |
| # > kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml | |
| # | |
| # | |
| # Запуск: | |
| # > kubectl apply -f <this file>.yaml | |
| # > kubectl logs -f pods/nginx-test | |
| # | |
| # Важно: Ingress должен создаваться после IngressClass, для того чтобы IngressClass увидел и подхватил Ingress. | |
| # В противном случае Ingress повиснет и не обработается. | |
| # | |
| # | |
| # Проверка: | |
| # 1. Внутри пода nginx-test будут бесконечно отправляться запросы в сервис. Можно проверить логи командой: | |
| # > kubectl logs -f pod/nginx-test | |
| # 2. На хосте также будет доступен сервис по имени хоста nginx-front-svc. | |
| # Можно добавить запись "127.0.0.1 nginx-front-svc" в файле /etc/hosts. И выполнить запрос: | |
| # > curl nginx-front-svc -> вернет index.html | |
| # > curl nginx-front-svc/test/foo.html -> вернет foo.html, /test/ будет обрезан | |
| # > curl nginx-front-svc/foo.html -> вернет index.html, потому что будет обработано правило defaultBackend | |
| # > curl localhost -> вернет 404, потому что в Ingress указан host: nginx-front-svc | |
| # | |
| # | |
| # Как прибить: | |
| # Следующая команда удалит все созданные ресурсы | |
| # > kubectl delete -f <this file>.yaml | |
| --- | |
| apiVersion: apps/v1 | |
| kind: Deployment | |
| metadata: | |
| name: nginx-dp-front | |
| spec: | |
| replicas: 3 | |
| selector: | |
| matchLabels: | |
| app: nginx-front | |
| template: | |
| metadata: | |
| labels: | |
| app: nginx-front | |
| spec: | |
| containers: | |
| - name: nginx | |
| image: nginx | |
| lifecycle: | |
| postStart: | |
| exec: | |
| command: ['/bin/bash', '-c', 'echo "Hello from ${HOSTNAME}" > /usr/share/nginx/html/index.html; echo "From FOO with ${HOSTNAME}" > /usr/share/nginx/html/foo.html'] | |
| --- | |
| apiVersion: v1 | |
| kind: Service | |
| metadata: | |
| name: nginx-front-svc | |
| spec: | |
| type: ClusterIP | |
| selector: | |
| app: nginx-front | |
| ports: | |
| - port: 80 | |
| targetPort: 80 | |
| protocol: TCP | |
| --- | |
| apiVersion: v1 | |
| kind: Pod | |
| metadata: | |
| name: nginx-test | |
| spec: | |
| containers: | |
| - name: ubuntu | |
| image: ubuntu | |
| command: ['/bin/bash', '-c'] | |
| args: | |
| - | | |
| apt-get update | |
| apt-get install -y curl | |
| while true; do | |
| sleep 5 | |
| echo "$(date):" | |
| echo " - Root says: $(curl -s nginx-front-svc)" | |
| echo " - Foo says: $(curl -s nginx-front-svc/foo.html)" | |
| done | |
| --- | |
| apiVersion: networking.k8s.io/v1 | |
| kind: IngressClass | |
| metadata: | |
| labels: | |
| app.kubernetes.io/component: controller | |
| name: nginx-example | |
| # annotations: | |
| # ingressclass.kubernetes.io/is-default-class: "true" | |
| spec: | |
| controller: k8s.io/ingress-nginx | |
| --- | |
| apiVersion: networking.k8s.io/v1 | |
| kind: Ingress | |
| metadata: | |
| name: nginx-front-svc | |
| annotations: | |
| # пример регулярки для реврайта | |
| nginx.ingress.kubernetes.io/use-regex: "true" | |
| nginx.ingress.kubernetes.io/rewrite-target: /$1 | |
| labels: | |
| app: mapp | |
| spec: | |
| ingressClassName: nginx-example | |
| defaultBackend: | |
| service: | |
| name: nginx-front-svc | |
| port: | |
| number: 80 | |
| rules: | |
| - host: nginx-front-svc | |
| http: | |
| paths: | |
| - path: /test/(.*) | |
| pathType: ImplementationSpecific | |
| backend: | |
| service: | |
| name: nginx-front-svc | |
| port: | |
| number: 80 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment