Как создать домен (виртуальный и не настроенный на DNS-сервере, а не зарегистрированный) для IP с использованием coredns

У меня установлена ​​последняя версия Kubernetes (1.15.0), я хочу создать пользовательский домен в coredns и сопоставить его с публичным ip рабочего узла.

Я попытался установить metallb и дать ему уже публичный ip, назначенный виртуальной машине в качестве диапазона, но все же мне не нравится публичный ip, сопоставленный с пользовательским доменом, который не совпадает с доменом кластера.

Также для metalb мое понимание того, что он действительно может назначить внешний ip для узла, так что, когда я делаю kubectl, получаю узлы шириной - я могу видеть узел, принимающий внешний ip, но этого не происходит, совет?

Я попробовал несколько конфигураций для перехода на второй уровень https://metallb.universe.tf/configuration/

Я попытался обновить конфигурационный файл coredns, но он не работает, я попытался добавить в него файл db, но не принимал его, и попытался переслать, и это то же самое:


apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
    Corefile: |
     #xxx.com {
      # proxy xx.com xxxx:443
     #}
     .:53 {
         log stdout
         health
         # Replace cluster.local with your cluster domain
         kubernetes cluster.local
         proxy . /etc/resolv.conf
         cache 30
     }
     xx.com:53 {
         errors
         cache 30
         forward . MY_PUBLIC_IP_ASSIGNED_TO_A_WORKER_NODE
     }
#     xx.db: |
 #     ; xx.com test file
  #    xx.com.            IN      SOA     sns.dns.icann.org. noc.dns.icann.org. 2015082541 7200 3600 1209600 3600
   #   xx.com.            IN      NS      b.iana-servers.net.
    #  xx.com.            IN      NS      a.iana-servers.net.
     # xx.com.            IN      A       xxxxxxxx
     # a.b.c.w.xx.com.    IN      TXT     "Not a wildcard"
     # cname.xx.com.      IN      CNAME   www.example.net.
     # service.cap.com.    IN      SRV     8080 10 10 cap.com.
     # *.xxx.com           IN      A       xxxxxx

~
~
~
~
~
~
~

Я просто хочу, когда я делаю nslookup в домене, модуль может разрешить его и сопоставить с моим внешним ip, а также хотел бы, чтобы внешний ip был сопоставлен с рабочим узлом.

1 ответ

Как только вы захотите сделать общедоступным узел, лучший способ сделать это, поместив рабочий узел позади LB-решения.

Если вы хотите сделать это с помощью MetalLB, сначала выделите часть IP-пространства для сервисов MetalLB. Подготовьте файл ConfigMap и разверните его. Пример ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.10.240-192.168.10.250 #

В режиме layer2 один узел в вашем кластере будет привлекать трафик для IP-адреса службы. Оттуда поведение зависит от выбранной политики трафика, а именно: "Кластер" и "Локальная" политика трафика (параметры: "Кластер" по умолчанию). Обратитесь к документации, чтобы увидеть больше информации. Теперь можно настроить службу pod и LB, например для nginx pod:

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

Затем разверните модуль nginx:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1
        ports:
        - name: http
          containerPort: 80

В результате можно увидеть внешний IP, назначенный LoadBalancer.

Другие вопросы по тегам