Как назначить DNS-имя приложению в локальном кластере Kubernetes? - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть локальный кластер Kubernetes на основе MicroK8s , работающий на компьютере с Ubuntu 18.04.

Чего я хочу достичь: Как правило, я хочу выставлять свои приложенияк DNS-именам и проверьте их локально.

Мои настройки:

Я создал следующее тестовое развертывание

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-app
  labels:
    app: hello-app
    tier: backend
    version: v1
spec:
  selector:
    matchLabels:
      app: hello-app
  replicas: 2
  template:
    metadata:
      labels:
        app: hello-app
    spec:
      containers:
      - name: hello-app
        image: localhost:5000/a-local-hello-image
        ports:
        - containerPort: 3000

Я добавил следующий дескриптор службы:

apiVersion: v1
kind: Service
metadata:
  name: hello-app
spec:
  selector:
    app: hello-app
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000

Теперь я хочу, чтобы мое приложение было доступно, скажем, по http://hello.someurl.com:3000.

Вопрос: Что мне нужно настроить в дополнение кмоя текущая конфигурация для сопоставления моего приложения с DNS-именем локально?

Примечание: Я прочитал документацию , которая, к сожалению, не помогла. Я также включил добавление DNS в своем кластере.

Буду признателен за любую помощь, любые указания о том, как двигаться вперед.

Ответы [ 2 ]

1 голос
/ 12 ноября 2019

Вы можете создать ресурс Ingress, как показано ниже:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  tls:
  - secretName: tls 
  rules:
  - host: site1.domain.com
    http:
      paths:
      - path: /path1/
        backend:
          serviceName: service1
          servicePort: 80
      - path: /path2/
        backend:
          serviceName: service2
          servicePort: 8080
      - path: /
        backend:
          serviceName: service3
          servicePort: 80
  - host: site2.domain.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80

Чтобы это работало, вам потребуется контроллер входа, например Nginx, Traefik и т. Д.

Один разу вас есть Ingress Controller (если у вас его еще нет) и вы создали ресурс Ingress (см. выше yaml), вы можете пересылать запросы в зависимости от хоста и пути к нужной службе. Например, если бы я хотел отправить трафик на service2, я бы сделал:

curl -H "site1.domain.com/path2/" INGRESS_IP:INGRESS_PORT. Запрос будет проходить через Ingress Controller и доставлять пакет в service2. Если вы измените имя и порт службы по своему, это должно работать нормально.

Конечно, вы также можете поместить его в /etc/hosts.

И вы можете настроить столько доменов ипути по вашему желанию в одном входном ресурсе.

1 голос
/ 12 ноября 2019

Простой способ добиться желаемого - использовать

kubectl port-forward service/hello-app 3000:3000

и добавить следующую запись в /etc/hosts файл

127.0.0.1 hello.someurl.com

Затем вы можете просто открыть свой браузер и перейтидо http://hello.someurl.com:3000

...