Стандартным способом настройки приложений, работающих на наборе подсистем в кластере Kubernetes, является использование ресурса службы.
Каждый Pod в Kubernetes имеет свой собственный IP-адрес, но набор подов может иметь одно DNS-имя.
Kubernetes способен балансировать нагрузку на поды без каких-либо изменений на прикладном уровне.
Службе по умолчанию присваивается IP-адрес (иногда называемый “cluster IP”), который используется прокси-серверами службы.
Служба может идентифицировать набор подов с помощью label selectors.
- Что такое Ingress?
- Вариант 1: Установка Nginx Ingress Controller без Helm
- Шаг 1: Установите инструменты git, curl и wget
- Шаг 2: Применим манифест Nginx Ingress Controller
- Шаг 3: Редактирование службы ingress-nginx-controller и установка внешних IP-адресов
- Шаг 4: Запуск подов ingress-nginx-controller на мастер нодах
- Вариант 2: Установка Nginx Ingress Controller Kubernetes с помощью Helm
- Шаг 1: Установите helm 3
- Шаг 2: Развертывание контоллера Nginx Ingress
- Развертывание приложения Nginx Ingress
- Создайте маршрут ingress
- Удаление чарта
Table of Contents
Что такое Ingress?
Прежде чем ответить на этот вопрос, необходимо понять, что такое объект Ingress в Kubernetes.
Согласно официальной документации Kubernetes, Ingress определяется следующим образом
An API object that manages external access to the services in a cluster, typically HTTP.
Ingress may provide load balancing, SSL termination and name-based virtual hosting.
Ingress в Kubernetes открывает маршруты HTTP и HTTPS извне кластера для сервисов, работающих внутри кластера.
Вся маршрутизация трафика контролируется правилами, определенными на ресурсе Ingress.
Ingress может быть настроен для:
- Предоставлять службам URL-адреса, доступные извне.
- балансировать нагрузку трафика, поступающего в службы кластера
- Терминировать трафик SSL/TLS
- Предоставлять виртуальный хостинг на основе имен в Kubernetes.
Контроллер Ingress – это то, что выполняет Ingress, обычно с помощью балансировщика нагрузки.
Ниже приведен пример того, как Ingress направляет весь клиентский трафик на службу в кластере Kubernetes:
Для стандартного трафика HTTP и HTTPS контроллер Ingress будет настроен на прослушивание портов 80 и 443.
Он должен быть привязан к IP-адресу, с которого кластер будет получать трафик.
Запись Wildcard DNS для домена, используемого для маршрутов Ingress, будет указывать на IP-адрес(ы), который прослушивает контроллер Ingress.
Kubernetes использует подход BYOS (Bring-Your-Own-Software) для большинства своих дополнений и не предоставляет программное обеспечение, выполняющее функции Ingress из коробки.
Вы можете выбрать один из множества доступных контроллеров Ingress.
Kubedex также проделал хорошую работу по обобщению списка Ingress, доступных для Kubernetes.
Получив все основные сведения о службах Kubernetes и Ingress, мы можем приступить к установке NGINX Ingress Controller Kubernetes.
Вариант 1: Установка Nginx Ingress Controller без Helm
В этом методе вы вручную загрузите и запустите манифесты развертывания с помощью инструмента командной строки kubectl.
Шаг 1: Установите инструменты git, curl и wget
Установите инструменты git, curl и wget в вашем Bastion, где установлен и настроен kubectl:
# CentOS / RHEL / Fedora / Rockysudo yum -y install wget curl git# Debian / Ubuntusudo apt updatesudo apt install wget curl git
Шаг 2: Применим манифест Nginx Ingress Controller
Процесс развертывания зависит от вашей настройки Kubernetes.
В моем Kubernetes будет использоваться руководство по развертыванию Bare-metal Nginx Ingress.
Для других кластеров Kubernetes, включая управляемые кластеры, см. следующие руководства:
- microk8s
- minikube
- AWS
- GCE – GKE
- Azure
- Digital Ocean
- Scaleway
- Exoscale
- Oracle Cloud Infrastructure
- Bare-metal
Метод Bare-metal применяется к любым кластерам Kubernetes, развернутым на “железе” с общим дистрибутивом Linux (например, CentOS, Ubuntu, Debian, Rocky Linux) и т.д.
Скачайте деплоймент контроллера Nginx для Baremetal:
repos/kubernetes/ingress-nginx/releases/latest | grep tag_name | cut -d '"' -f 4)wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/${controller_tag}/deploy/static/provider/baremetal/deploy.yaml
Переименуйте файл:
mv deploy.yaml nginx-ingress-controller-deploy.yaml
Не стесняйтесь проверять содержимое файла и вносить изменения по своему усмотрению:
vim nginx-ingress-controller-deploy.yaml
Примените файл манифеста ингресс-контроллера Nginx:
$ kubectl apply -f nginx-ingress-controller-deploy.yamlnamespace/ingress-nginx createdserviceaccount/ingress-nginx createdconfigmap/ingress-nginx-controller createdclusterrole.rbac.authorization.k8s.io/ingress-nginx createdclusterrolebinding.rbac.authorization.k8s.io/ingress-nginx createdrole.rbac.authorization.k8s.io/ingress-nginx createdrolebinding.rbac.authorization.k8s.io/ingress-nginx createdservice/ingress-nginx-controller-admission createdservice/ingress-nginx-controller createddeployment.apps/ingress-nginx-controller createdingressclass.networking.k8s.io/nginx createdvalidatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission createdserviceaccount/ingress-nginx-admission createdclusterrole.rbac.authorization.k8s.io/ingress-nginx-admission createdclusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission createdrole.rbac.authorization.k8s.io/ingress-nginx-admission createdrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission createdjob.batch/ingress-nginx-admission-create createdjob.batch/ingress-nginx-admission-patch created
Выполните следующую команду, чтобы проверить, запустились ли поды входящего контроллера:
$ kubectl get pods -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --watchNAME READY STATUS RESTARTS AGEingress-nginx-admission-create--1-hpkzp 0/1 Completed 0 43singress-nginx-admission-patch--1-qnjlj 0/1 Completed 1 43singress-nginx-controller-644555766d-snvqf 1/1 Running 0 44s
После того, как поды контроллера запущены, вы можете отменить команду, набрав Ctrl+C.
Шаг 3: Редактирование службы ingress-nginx-controller и установка внешних IP-адресов
В настройках деплоймента Kubernetes в частной инфраструктуре маловероятно, что у вас будет поддержка службы Load Balancer.
$ kubectl get svc -n ingress-nginx ingress-nginx-controllerNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEingress-nginx-controller NodePort 10.101.4.21 <none> 80:30248/TCP,443:30773/TCP 3m53s
Вы заметите службу типа NodePort.
Мы обновим сервис, сделав привязку Ingress к определенному IP-адресу с помощью External IP.
Kubernetes поддерживает назначение внешних IP-адресов в поле Service spec.externalIPs с помощью объекта ExternalIP.
Это откроет дополнительный виртуальный IP-адрес, назначенный службе Nginx Ingress Controller Service.
Это позволит нам направлять трафик на локальный узел для балансировки нагрузки.
В моем кластере Kubernetes у меня есть две ноды мастер с указанными ниже основными IP-адресами:
- k8smaster01.example.com–192.168.42.245
- k8smaster02.example.com–192.168.42.246
Я создам файл, содержащий модификацию для добавления внешних IP в службу.
$ vim external-ips.yamlspec: externalIPs: - 192.168.42.245 - 192.168.42.246
Теперь давайте применим патч к службе.
$ kubectl -n ingress-nginx patch svc ingress-nginx-controller --patch "$(cat external-ips.yaml)"service/ingress-nginx-controller patched
Проверьте службу после применения исправления, были ли добавлены внешние IP-адреса:
$ kubectl get svc ingress-nginx-controller -n ingress-nginxNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEingress-nginx-controller NodePort 10.101.4.21 192.168.42.245,192.168.42.246 80:30248/TCP,443:30773/TCP 8m31
Шаг 4: Запуск подов ingress-nginx-controller на мастер нодах
Можно рассмотреть возможность запуска Ingress Controller на мастерах.
Для этого мы пометим мастер ноды, а затем воспользуемся node selector для назначения подов в деплойменте контроллера Ingress на нодах Control Plane.
$ kubectl get nodes -l node-role.kubernetes.io/control-planeNAME STATUS ROLES AGE VERSIONk8smaster01.example.com Ready control-plane,master 16d v1.22.2k8smaster02.example.com Ready control-plane,master 16d v1.22.2
Добавьте метки run-nginx-ingress=true на главные ноды; это могут быть любые другие ноды в кластере:
kubectl label node k8smaster01.example.com run-nginx-ingress=truekubectl label node k8smaster02.example.com run-nginx-ingress=true
Метки, добавленные к ноде, можно проверить с помощью команды:
kubectl describe node <node-name>
Пример:
$ kubectl describe node k8smaster01.example.comName: k8smaster01.example.comRoles: control-plane,masterLabels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/os=linux kubernetes.io/arch=amd64 kubernetes.io/hostname=k8smaster01.example.com kubernetes.io/os=linux node-role.kubernetes.io/control-plane= node-role.kubernetes.io/master= node.kubernetes.io/exclude-from-external-load-balancers= run-nginx-ingress=true # Label added.....
Создайте файл патча для запуска подов на нодах с labelrun-nginx-ingress=true
$ vim node-selector-patch.yamlspec: template: spec: nodeSelector: run-nginx-ingress=true
Применим патч:
$ kubectl get deploy -n ingress-nginxNAME READY UP-TO-DATE AVAILABLE AGEingress-nginx-controller 1/1 1 1 20m$ kubectl -n ingress-nginx patch deployment/ingress-nginx-controller --patch "$(cat node-selector-patch.yaml)"deployment.apps/ingress-nginx-controller patched
В Kubernetes настройкой по умолчанию является запрет на запуск подов на мастер нодах.
Чтобы поды Ingress запускались на мастер-узлах, необходимо добавить tolerations.
Давайте создадим файл патча для применения tolerations при развертывании Ingress.
$ vim master-node-tolerations.yamlspec: template: spec: tolerations: - key: node-role.kubernetes.io/master operator: Equal value: "true" effect: NoSchedule - key: node-role.kubernetes.io/master operator: Equal effect: NoSchedule
И применим его:
kubectl -n ingress-nginx patch deployment/ingress-nginx-controller --patch "$(cat master-node-tolerations.yaml)"
Вариант 2: Установка Nginx Ingress Controller Kubernetes с помощью Helm
Если вы выбрали метод установки с помощью Helm, выполните шаги, описанные в этом разделе.
Шаг 1: Установите helm 3
Установите helm 3 на рабочей станции, где установлен и настроен Kubectl.
cd ~/curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3chmod 700 get_helm.sh./get_helm.sh
Скрипт установки работает как для операционных систем Linux, так и для macOS.
Вот результат успешной установки:
Helm v3.7.1 is available. Changing from version v3.6.3.Downloading https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gzVerifying checksum... Done.Preparing to install helm into /usr/local/binhelm installed into /usr/local/bin/helm
Давайте запросим версию пакета helm для проверки работоспособности установки:
$ helm versionversion.BuildInfo{Version:"v3.7.1", GitCommit:"1d11fcb5d3f3bf00dbe6fe31b8412839a96b3dc4", GitTreeState:"clean", GoVersion:"go1.16.9"}
Шаг 2: Развертывание контоллера Nginx Ingress
Загрузите последний стабильный выпуск кода Nginx Ingress Controller:
controller_tag=$(curl -s https://api.github.com/repos/kubernetes/ingress-nginx/releases/latest | grep tag_name | cut -d '"' -f 4)wget https://github.com/kubernetes/ingress-nginx/archive/refs/tags/${controller_tag}.tar.gz
Распакуйте загруженный файл:
tar xvf ${controller_tag}.tar.gz
Перейдите в созданный каталог:
cd ingress-nginx-${controller_tag}
Измените рабочий каталог на папку charts:
cd charts/ingress-nginx/
Пометим ноды, на которых будут работать поды Ingress Controller
Node selector используется в тем случаях, когда нам нужно развернуть под или группу подов на определенной группе нод, которые соответствуют критериям, заданным в конфигурационном файле.
Перечислим ноды:
$ kubectl get nodesNAME STATUS ROLES AGE VERSIONk8smaster01.example.com Ready control-plane,master 14h v1.22.2k8smaster02.example.com Ready control-plane,master 14h v1.22.2k8sworker01.example.com Ready <none> 13h v1.22.2k8sworker02.example.com Ready <none> 13h v1.22.2k8sworker03.example.com Ready <none> 13h v1.22.2
Добавьте метку run-nginx-ingress=true:
$ kubectl label node k8smaster01.example.com run-nginx-ingress=truenode/k8smaster01.example.com labeled$ kubectl label node k8smaster02.example.com run-nginx-ingress=truenode/k8smaster02.example.com labeled
Покажем набор меток:
$ kubectl describe node k8smaster01.example.comName: k8smaster01.example.comRoles: control-plane,masterLabels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/os=linux kubernetes.io/arch=amd64 kubernetes.io/hostname=k8smaster01.example.com kubernetes.io/os=linux node-role.kubernetes.io/control-plane= node-role.kubernetes.io/master= node.kubernetes.io/exclude-from-external-load-balancers= run-nginx-ingress=true # Label added.....
Обновление файла values.yml для изменения параметров
Редактирование файла значений
vim values.yaml
Добавление tolerations для мастер нод
controller: tolerations: - key: node-role.kubernetes.io/master operator: Equal value: "true" effect: NoSchedule - key: node-role.kubernetes.io/master operator: Equal effect: NoSchedule
Setcontroller.service.externalIPs
controller: service: externalIPs: ["192.168.42.245","192.168.42.246"]
Чтобы установить количество реплик развертывания контроллера Ingress на controller.replicaCount
controller: replicaCount: 1
При использовании node selector для назначения подов контроллера Ingress, установленного в controller.nodeSelector
controller: nodeSelector: kubernetes.io/os: linux run-nginx-ingress: "true"
Создайте пространство имен
kubectl create namespace ingress-nginx
Теперь разверните Nginx Ingress Controller с помощью следующих команд
helm install -n ingress-nginx ingress-nginx -f values.yaml .
Образец вывода развертывания
NAME: ingress-nginxLAST DEPLOYED: Thu Nov 4 02:50:28 2021NAMESPACE: ingress-nginxSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:The ingress-nginx controller has been installed.It may take a few minutes for the LoadBalancer IP to be available.You can watch the status by running 'kubectl --namespace ingress-nginx get services -o wide -w ingress-nginx-controller'An example Ingress that makes use of the controller: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx name: example namespace: foo spec: ingressClassName: example-class rules: - host: www.example.com http: paths: - path: / pathType: Prefix backend: service: name: exampleService port: 80 # This section is only required if TLS is to be enabled for the Ingress tls: - hosts: - www.example.com secretName: example-tlsIf TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided: apiVersion: v1 kind: Secret metadata: name: example-tls namespace: foo data: tls.crt: <base64 encoded cert> tls.key: <base64 encoded key> type: kubernetes.io/tls
Проверка состояния всех ресурсов в пространстве имен ingress-nginx:
Поды:
$ kubectl get pods -n ingress-nginxNAME READY STATUS RESTARTS AGEingress-nginx-controller-6f5844d579-hwrqn 1/1 Running 0 23m
Для проверки логов на нодах используйте команды:
$ kubectl -n ingress-nginx logs deploy/ingress-nginx-controller-------------------------------------------------------------------------------NGINX Ingress controller Release: v1.0.4 Build: 9b78b6c197b48116243922170875af4aa752ee59 Repository: https://github.com/kubernetes/ingress-nginx nginx version: nginx/1.19.9-------------------------------------------------------------------------------W1104 00:06:59.684972 7 client_config.go:615] Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.I1104 00:06:59.685080 7 main.go:221] "Creating API client" host="https://10.96.0.1:443"I1104 00:06:59.694832 7 main.go:265] "Running in Kubernetes cluster" major="1" minor="22" git="v1.22.2" state="clean" commit="8b5a19147530eaac9476b0ab82980b4088bbc1b2" platform="linux/amd64"I1104 00:06:59.937097 7 main.go:104] "SSL fake certificate created" file="/etc/ingress-controller/ssl/default-fake-certificate.pem"I1104 00:06:59.956498 7 ssl.go:531] "loading tls certificate" path="/usr/local/certificates/cert" key="/usr/local/certificates/key"I1104 00:06:59.975510 7 nginx.go:253] "Starting NGINX Ingress controller"I1104 00:07:00.000753 7 event.go:282] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"ingress-nginx", Name:"ingress-nginx-controller", UID:"5aea2f36-fdf2-4f5c-96ff-6a5cbb0b5b82", APIVersion:"v1", ResourceVersion:"13359975", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap ingress-nginx/ingress-nginx-controllerI1104 00:07:01.177639 7 nginx.go:295] "Starting NGINX process"I1104 00:07:01.177975 7 leaderelection.go:243] attempting to acquire leader lease ingress-nginx/ingress-controller-leader...I1104 00:07:01.178194 7 nginx.go:315] "Starting validation webhook" address=":8443" certPath="/usr/local/certificates/cert" keyPath="/usr/local/certificates/key"I1104 00:07:01.180652 7 controller.go:152] "Configuration changes detected, backend reload required"I1104 00:07:01.197509 7 leaderelection.go:253] successfully acquired lease ingress-nginx/ingress-controller-leaderI1104 00:07:01.197857 7 status.go:84] "New leader elected" identity="ingress-nginx-controller-6f5844d579-hwrqn"I1104 00:07:01.249690 7 controller.go:169] "Backend successfully reloaded"I1104 00:07:01.249751 7 controller.go:180] "Initial sync, sleeping for 1 second"I1104 00:07:01.249999 7 event.go:282] Event(v1.ObjectReference{Kind:"Pod", Namespace:"ingress-nginx", Name:"ingress-nginx-controller-6f5844d579-hwrqn", UID:"d6a2e95f-eaaa-4d6a-85e2-bcd25bf9b9a3", APIVersion:"v1", ResourceVersion:"13364867", FieldPath:""}): type: 'Normal' reason: 'RELOAD' NGINX reload triggered due to a change in configuration
Следить за логами по мере их потокового выполнения:
kubectl -n ingress-nginx logs deploy/ingress-nginx-controller -f
Я установлю количество реплик контроллера Pods равным 2:
$ vim values.yaml controller: replicaCount: 3
Мы можем подтвердить, что в настоящее время у нас есть один под:
$ kubectl -n ingress-nginx get deployNAME READY UP-TO-DATE AVAILABLE AGEingress-nginx-controller 1/1 1 1 43m
Обновите версию ingress-nginx, выполнив следующие команды helm:
$ helm upgrade -n ingress-nginx ingress-nginx -f values.yaml .Release "ingress-nginx" has been upgraded. Happy Helming!NAME: ingress-nginxLAST DEPLOYED: Thu Nov 4 03:35:41 2021NAMESPACE: ingress-nginxSTATUS: deployedREVISION: 5TEST SUITE: NoneNOTES:The ingress-nginx controller has been installed.
Проверьте текущее количество подов после обновления:
$ kubectl -n ingress-nginx get deployNAME READY UP-TO-DATE AVAILABLE AGEingress-nginx-controller 3/3 3 3 45m
Развертывание приложения Nginx Ingress
Метод определения Ingress можно также просмотреть с помощью опции команды explain:
$ kubectl explain ingressKIND: IngressVERSION: networking.k8s.io/v1DESCRIPTION: Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.FIELDS: apiVersion<string> APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources kind<string> Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds metadata<Object> Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata spec<Object> Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status status<Object> Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
Создайте временное пространство имен под названием demo
kubectl create namespace demo
Создайте тестовый YAML-файл подов и служб:
cd ~/vim demo-app.yml
Вставьте приведенные ниже данные в файл:
kind: PodapiVersion: v1metadata: name: apple-app labels: app: applespec: containers: - name: apple-app image: hashicorp/http-echo args: - "-text=apple"---kind: ServiceapiVersion: v1metadata: name: apple-servicespec: selector: app: apple ports: - port: 5678 # Default port for image---kind: PodapiVersion: v1metadata: name: banana-app labels: app: bananaspec: containers: - name: banana-app image: hashicorp/http-echo args: - "-text=banana"---kind: ServiceapiVersion: v1metadata: name: banana-servicespec: selector: app: banana ports: - port: 5678 # Default port for image
Создайте поды и службы:
$ kubectl apply -f demo-app.yml -n demopod/apple-app createdservice/apple-service createdpod/banana-app createdservice/banana-service created
Проверьте, работает ли он
$ kubectl get pods -n demoNAME READY STATUS RESTARTS AGEapple-app 1/1 Running 0 2m53sbanana-app 1/1 Running 0 2m52subuntu 1/1 Running 0 11m$ kubectl -n demo logs apple-app2021/10/19 00:24:28 Server is listening on :5678
Создайте под Ubuntu, который будет использоваться для тестирования подключения к сервису
cat <<EOF | kubectl -n demo apply -f -apiVersion: v1kind: Podmetadata: name: ubuntu labels: app: ubuntuspec: containers: - name: ubuntu image: ubuntu:latest command: ["/bin/sleep", "3650d"] imagePullPolicy: IfNotPresent restartPolicy: AlwaysEOF
Тестирование
$ kubectl -n demo exec -ti ubuntu -- bashroot@ubuntu:/# apt update && apt install curl -yroot@ubuntu:/# curl apple-service:5678appleroot@ubuntu:/# curl banana-service:5678banana
Создайте маршрут ingress
Теперь объявите Ingress для маршрутизации запросов к /apple на первый сервис, а запросов к /banana на второй сервис.
Проверьте поле правил Ingress, которое определяет, как будут передаваться запросы.
Для кластера Kubernetes версии < 1.19
$ vim demo-app-ingress.ymlapiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: demo-app-ingress annotations: # use the shared ingress-nginx kubernetes.io/ingress.class: "nginx"spec: rules: - host: apple-banana.example.com http: paths: - path: /apple pathType: Prefix backend: service: name: apple-service port: number: 5678 - path: /banana pathType: Prefix backend: service: name: banana-service port: number: 5678
Создайте ресурс ingress с помощью kubectl:
$ kubectl -n demo apply -f demo-app-ingress.ymlingress.networking.k8s.io/demo-app-ingress created
Для кластера Kubernetes версии >= 1.19:
apiVersion: networking.k8s.io/v1kind: IngressClassmetadata: name: nginxspec: controller: k8s.io/ingress-nginx---apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: demo-app-ingressspec: ingressClassName: nginx rules: - host: apple-banana.example.com http: paths: - path: /apple pathType: Prefix backend: service: name: apple-service port: number: 5678 - path: /banana pathType: Prefix backend: service: name: banana-service port: number: 5678
Затем примените файл для создания объектов
$ kubectl -n demo apply -f demo-app-ingress.ymlingressclass.networking.k8s.io/nginx configuredingress.networking.k8s.io/demo-app-ingress created
Список сконфигурированных ингрессов:
$ kubectl get ingressNAME CLASS HOSTS ADDRESS PORTS AGEdemo-app-ingress <none> apple-banana.example.com 192.168.42.245 80 7m36s
Проверка конфигурации:
$ kubectl get pods -n ingress-nginxNAME READY STATUS RESTARTS AGEingress-nginx-controller-6f5844d579-hwrqn 1/1 Running 0 53mingress-nginx-controller-6f5844d579-kvgtd 1/1 Running 0 25mingress-nginx-controller-6f5844d579-lcrrt 1/1 Running 0 25m$ kubectl exec -n ingress-nginx -it ingress-nginx-controller-6f5844d579-hwrqn -- /bin/bashbash-5.1$
Удаление чарта
Чтобы удалить ингресс-контроллер nginx и все связанные с ним ресурсы, которые мы развернули с помощью Helm, выполните в терминале следующую команду.
$ helm -n ingress-nginx uninstall ingress-nginxrelease "ingress-nginx" uninstalled
см. также:
- ☸️Peirates : Инструмент для тестирования на проникновение Kubernetes
- ☸️Побег из контейнера Kubernetes с помощью монтирования HostPath
- ☸️Какие типы сервисов существуют в Kubernetes?
- ☸️Kubernetes и RBAC: ограничение доступа пользователя в одном namespace
- ☸️Как установить Prometheus и Grafana на Kubernetes с помощью Helm 3
- ☸️kube-beacon: выполняет аудит безопасности на основе спецификации CIS Kubernetes Benchmark
- ☸️Сканеры Kubernetes для поиска уязвимостей и неправильной конфигурации кластеров
- ☸️Проброс логов Kubernetes в Elasticsearch (ELK) с помощью Fluentbit
- ☸️Мониторинг контейнеров Docker и Kubernetes с помощью Weave Scope