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завиток отсюда .

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