Kubernetes использует Helm для установки Ingress и наступает на используемую яму

Kubernetes

1. Введение

Добро пожаловать в гостиМедленный разговор тыквы www.pkslow.comПолучайте больше отличных статей!

IngressдаKubernetesочень важныйController, который похож на компонент переадресации маршрутизации, который позволяет внешнему миру получить доступKubernetesВнутреннийService. КромеIngressNodePort,LoadBalanceи так далее,IngressСпособ воздействия на внешний мир по-прежнему очень популярен.

2 Установите вход

мы проходимhelmДавай устанавливай, будет удобнее, сначала обновиhelmсклад.

$ helm repo update

HelmСтатьи по Теме:Разверните приложение Kubernetes с помощью HELM, поддержка развертывания нескольких условий окружающей среды и отката версии

Статьи по теме контейнерных технологий

После обновления найдите репозиторий оIngressКакие есть пакеты:

$ $ helm search repo ingress
NAME                          	CHART VERSION	APP VERSION	DESCRIPTION                                       
azure/gce-ingress             	1.2.0        	1.4.0      	A GCE Ingress Controller                          
azure/ingressmonitorcontroller	1.0.48       	1.0.47     	IngressMonitorController chart that runs on kub...
azure/nginx-ingress           	1.41.2       	v0.34.1    	An nginx Ingress controller that uses ConfigMap...
stable/nginx-ingress          	0.9.5        	0.10.2     	An nginx Ingress controller that uses ConfigMap...
azure/contour                 	0.2.0        	v0.15.0    	Contour Ingress controller for Kubernetes         
azure/external-dns            	1.8.0        	0.5.14     	Configure external DNS servers (AWS Route53, Go...
azure/kong                    	0.36.7       	1.4        	DEPRECATED The Cloud-Native Ingress and API-man...
azure/lamp                    	1.1.3        	7          	Modular and transparent LAMP stack chart suppor...
azure/nginx-lego              	0.3.1        	           	Chart for nginx-ingress-controller and kube-lego  
azure/traefik                 	1.87.2       	1.7.24     	A Traefik based Kubernetes ingress controller w...
azure/voyager                 	3.2.4        	6.0.0      	DEPRECATED Voyager by AppsCode - Secure Ingress...
stable/external-dns           	0.4.9        	0.4.8      	Configure external DNS servers (AWS Route53, Go...
stable/lamp                   	0.1.4        	           	Modular and transparent LAMP stack chart suppor...
stable/nginx-lego             	0.3.1        	           	Chart for nginx-ingress-controller and kube-lego  
stable/traefik                	1.24.1       	1.5.3      	A Traefik based Kubernetes ingress controller w...
stable/voyager                	3.1.0        	6.0.0-rc.0 	Voyager by AppsCode - Secure Ingress Controller...

выберитеazure/nginx-ingressДля установки обратите внимание, что есть версии. Установите следующим образом:

$ helm install pkslow-ingress azure/nginx-ingress

После успешной установки консоль выдаст соответствующие инструкции. Но будьте осторожны, идите кKubernetes DashboardПроверьте, действительно ли установка прошла успешно. Я столкнулся с ошибками установки, и все из-за того, что загрузка зеркала не удалась. Решение состоит в том, чтобы открыть глобальный代理, сначала вручную загрузите соответствующее зеркало. как:

us.gcr.io/k8s-artifacts-prod/ingress-nginx/controller:v0.34.1
k8s.gcr.io/defaultbackend-amd64:1.5
jettech/kube-webhook-certgen:v1.0.0
quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.32.0

После успешной установки соответствующиеPodsВсе побежали. СвязанныйDeploymentимеют:

3 Использование входа

3.1 Доступ к сервису

Простейший пример заключается в следующем:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.19.0
          ports:
            - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx-service
spec:
  ports:
    - port: 80
      name: nginx-service
      protocol: TCP
      targetPort: 80
  selector:
    app: nginx
  type: ClusterIP

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: nginx-service
              servicePort: 80
      host: localhost

После этой конфигурации, когда мы посещаемhttp://localhost/, наш запрос будет переадресованnginx-serviceиз80порт вверх. Следующее:

3.2 Доступ к нескольким службам

Все усложняется, когда необходимо получить доступ к нескольким службам. Существует два метода конфигурации для доступа к нескольким службам, один из них — черезURLСовпадение пути перенаправлено, другое через子域名Вперед.

3.2.1 Метод субдомена

Переадресация через поддомены настраивается следующим образом:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: nginx-service
              servicePort: 80
      host: nginx.localhost
    - http:
        paths:
          - path: /
            backend:
              serviceName: springboot-service
              servicePort: 8080
      host: springboot.localhost

Только в целях экономии местаIngressнастроен.

доступhttp://nginx.localhost/следующее:

доступhttp://springboot.localhost/swagger-ui.htmlКак следует, обратите внимание на этоURLс подпутьюswagger-ui.html:

3.2.2 Метод сопоставления пути URL

который проходитURLНастроен ли метод сопоставления путей таким образом?

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - http:
        paths:
          - path: /nginx
            backend:
              serviceName: nginx-service
              servicePort: 80
      host: localhost
    - http:
        paths:
          - path: /springboot
            backend:
              serviceName: springboot-service
              servicePort: 8080
      host: localhost

После этой конфигурации он будет напрямую сообщать404,но нетIngressиз404, ноNginxилиSpringbootиз404. Указывает, что запрос был успешно перенаправлен в соответствующийservice, но есть проблема с путем. Причина в том, что при такой настройкеIngressВоляpathтакже направленоserviceначальство. Таким образом, фактический эффект выглядит следующим образом:

localhost/nginx      --> nginx-service/nginx
localhost/springboot --> springboot-service/springboot

так служитьWeb ContextПуть для настройкиpathсовпадение. Напримерnginx-serviceБазовый путь будет изменен на/nginx, вместо/.

Если вы хотите продолжать служитьWeb Contextпуть/, то нужно настроитьrewriteправила, такие какnginx.ingress.kubernetes.io/rewrite-target: /$1.

4 Резюме

Пройдя его один раз, ям действительно много. использовать子域名Это кажется лучшим способом. Кроме того,IngressЕсть и яма, это реализацияHTTP/HTTPSпереадресовано, ноTCPЭто не сработает, например, я вKubernetesустановилMySQLбазу данных, вам нужно поставить адрес и3306отTCPБолее проблематично представить метод внешнему миру, и мы обсудим его позже.


Добро пожаловать в публичный аккаунт WeChatТыква медленный разговор>, буду обновлять для вас...

Читайте больше, делитесь больше, пишите больше, организуйте больше.