Службы не могут общаться, потому что в Kubernetes не разрешается DNS - PullRequest
0 голосов
/ 21 апреля 2020

Я настраиваю свои сервисы с типом ClusterIP. И я хочу, чтобы они общались.

Служба

apiVersion: v1
kind: Service
metadata:
 labels:
  app: app-backend-deployment
 name: app-backend
spec:
 type: ClusterIP
 ports:
 - port: 8020
   protocol: TCP
   targetPort: 8100
 selector:
  app: app-backend

Развертывание

apiVersion: apps/v1
kind: Deployment
metadata:
 labels:
  app: app-backend
 name: app-backend-deployment
spec:
 replicas: 1
 selector:
    matchLabels:
      app: app-backend
 template:
    metadata:
      labels:
        app: app-backend
    spec:
     containers:
     - name: app-backend
       image: app-backend
       ports:
       - containerPort: 8100
       imagePullPolicy: Never

ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: backend-conf # name of configMap
data:
  BACKEND_SERVICE_HOST: app-backend:8020

И это то, что я передаю в службу веб-интерфейса, и я хочу сделать вызов REST через имя DNS, например http://app-backend: 8020 / get / 1 . Но, как я вижу в консоли, приложение не может разрешить DNS-имя net::ERR_NAME_NOT_RESOLVED.

. Я также проверяю pod nslookup:

busybox nslookup app-backend.default.svc.cluster.local
Server:         10.96.0.10
Address:        10.96.0.10:53

Name:   app-backend.default.svc.cluster.local
Address: 10.106.41.36

и сравниваю его с

kubectl describe svc app-backend
Name:              app-backend
Namespace:         default
Labels:            app=app-backend-deployment
Annotations:       kubectl.kubernetes.io/last-applied-configuration:
                     {"...
Selector:          app=app-backend
Type:              ClusterIP
IP:                10.106.41.36
Port:              <unset>  8020/TCP
TargetPort:        8100/TCP

И, как вы можете видеть, есть тот же IP на адрес, но я не знаю, и где посмотреть, что не так, почему не работает DNS-преобразователь. kubectl version Client "v1.15.5", Server Version:"v1.17.3",

1 Ответ

1 голос
/ 23 апреля 2020

Из-за того сервиса внешнего интерфейса, который обслуживался на локальном компьютере (как работает Angular), REST-запрос не может go через DNS Kubernetes с другой серверной службой. Мне нужно сообщить им через Ingress. Из-за разных аннотаций я должен использовать 2 Ingress. В Meaby есть лучший способ использовать только один, но когда я хочу использовать только один Ingress, я не могу найти способ заставить их оба работать с одной и той же аннотацией.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 annotations:
  kubernetes.io/ingress.class: nginx
  nginx.ingress.kubernetes.io/rewrite-target: /$2
 name: app-backend-ingress
spec:
 rules:
 - host: app.io
   http:
     paths:
       - path: /api(/|$)(.*)
         backend:
          serviceName: app-backend
          servicePort: 8020
---  
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 annotations:
  kubernetes.io/ingress.class: nginx
  nginx.ingress.kubernetes.io/rewrite-target: /
 name: app-frontend-ingress
spec:
 rules:
 - host: app.io
   http:
     paths:
       - path: /
         backend:
          serviceName: app-frontend
          servicePort: 80
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...