Как создать домен (виртуальный и не настроенный на 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.