Kubernetes - вызов микросервиса по имени службы
У меня есть две микросервисы, развернутые в кластере K8S (локально на 3 виртуальных машинах - 1 главный и 2 рабочих узла):
1- микросервис обмена
валют; 2 - микросервис преобразования валют.
Я пытаюсь вызвать микросервис обмена валют из преобразования валюты , используя имя службы:
http: /// currency-exchange: 8000.
Он возвращает ошибку, как показано ниже:
{"timestamp":"2021-02-17T08:38:25.590+0000","status":500,"error":"Internal Server Error","message":"currency-exchange executing GET http://currency-exchange:8000/currency-exchange/from/EUR/to/INR","path":"/currency-conversion/from/EUR/to/INR/quantity/10"}
Я использую Kubernetes, CentOS8 с использованием Calico CNI с установленным FELIX_IPTABLESBACKEND=NFT на основе этой ссылки для облегчения связи POD-TO-POD.
Текущие доступные услуги:
[root@k8s-master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
currency-conversion NodePort 10.106.70.108 <none> 8100:32470/TCP 3h40m
currency-exchange NodePort 10.110.232.189 <none> 8000:31776/TCP 3h41m
Стручки:
[root@k8s-master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
currency-conversion-86d9bc4698-rxdkh 1/1 Running 0 5h45m 192.168.212.125 worker-node-1 <none> <none>
currency-exchange-c79ff888b-c8sdd 1/1 Running 0 5h44m 192.168.19.160 worker-node-2 <none> <none>
currency-exchange-c79ff888b-nfqpx 1/1 Running 0 5h44m 192.168.212.65 worker-node-1 <none> <none>
Список доступных модулей CoreDNS:
[root@k8s-master ~]# kubectl get pods -o wide -n kube-system | grep coredns
coredns-74ff55c5b-9x5qm 1/1 Running 8 25d 192.168.235.218 k8s-master <none> <none>
coredns-74ff55c5b-zkkn7 1/1 Running 8 25d 192.168.235.220 k8s-master <none> <none>
Перечислите все переменные ENV:
[root@k8s-master ~]# kubectl exec -it currency-conversion-86d9bc4698-rxdkh -- printenv
HOSTNAME=currency-conversion-86d9bc4698-rxdkh
CURRENCY_EXCHANGE_SERVICE_HOST=http://currency-exchange
KUBERNETES_SERVICE_HOST=10.96.0.1
CURRENCY_EXCHANGE_SERVICE_PORT=8000
........
nslookup kubernetes.default exec Команда:
[root@k8s-master ~]# kubectl exec -it currency-conversion-86d9bc4698-rxdkh -- nslookup kubernetes.default
nslookup: can't resolve '(null)': Name does not resolve
nslookup: can't resolve 'kubernetes.default': Try again
command terminated with exit code 1
Как люди решают такую проблему? они настраивают / настраивают DNS для правильной работы в качестве реестра служб?
заранее спасибо
ИЗМЕНЕНО:
[root@k8s-master ~]# kubectl describe service currency-conversion
Name: currency-conversion
Namespace: default
Labels: app=currency-conversion
Annotations: <none>
Selector: app=currency-conversion
Type: NodePort
IP Families: <none>
IP: 10.106.70.108
IPs: 10.106.70.108
Port: <unset> 8100/TCP
TargetPort: 8100/TCP
NodePort: <unset> 32470/TCP
Endpoints: 192.168.212.125:8100
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
[root@k8s-master ~]# kubectl describe service currency-exchange
Name: currency-exchange
Namespace: default
Labels: app=currency-exchange
Annotations: <none>
Selector: app=currency-exchange
Type: NodePort
IP Families: <none>
IP: 10.110.232.189
IPs: 10.110.232.189
Port: <unset> 8000/TCP
TargetPort: 8000/TCP
NodePort: <unset> 31776/TCP
Endpoints: 192.168.19.160:8000,192.168.212.65:8000
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
1 ответ
Мне кажется, вы неправильно настроили оверлейную сеть CNI. Я проверил ваш предыдущий вопрос, чтобы проверить IP-адрес узла, и мне кажется, что ваша сеть модулей перекрывается с сетью вашего хоста:
Кубернеты
pod-network-cidr
это
IP prefix
для всех подов в кластере Kubernetes. Этот диапазон не должен конфликтовать с другими сетями в вашем
VPC
Капсула сеть Kubernetes документация описывает это так:
Позаботьтесь о том, чтобы ваша сеть Pod не перекрывалась ни с одной из сетей хоста: вы можете столкнуться с проблемами, если будет какое-либо перекрытие. (Если вы обнаружите конфликт между предпочтительной сетью Pod вашего сетевого плагина и некоторыми из ваших хост-сетей, вам следует подумать о подходящем блоке CIDR для использования вместо этого, а затем использовать его во время
kubeadm init
с--pod-network-cidr
и как замена в YAML вашего сетевого плагина).
Это также упоминается в инструкциях calico при создании кластера :
Примечание . Если 192.168.0.0/16 уже используется в вашей сети, вы должны выбрать другой CIDR сети pod, заменив 192.168.0.0/16 в приведенной выше команде.
PS. Вы всегда можете
wget
завиток отсюда .