Pod to Pod общение внутри Сервиса - PullRequest
0 голосов
/ 29 января 2019

Можно ли отправить запрос http Rest другому модулю K8, который принадлежит той же службе в Kubernetes?

EG Service name = UserService, 2 Pods (replica = 2)

Pod 1 --> Pod 2 //using pod ip not load balanced hostname 
Pod 2 --> Pod 1

Соединение завершено, Rest GET 1.2.3.4:7079/user/1

Получено значение для host + portfrom kubectl get ep

Оба IP-адреса модуля успешно работают за пределами модуля, но когда я выполняю kubectl exec -it в модуле и выполняю запрос через CURL, он возвращает значение 404, не найденное для конечной точки.

Q Что я хотел бы знать, можно ли сделать запрос другому модулю K8, который находится в той же службе?

Q Почему я могу получить успешный ping 1.2.3.4, но не попасть в Rest API?

ниже - мои файлы конфигурации

 #values.yml
replicaCount: 1

 image:
  repository: "docker.hosted/app"
  tag: "0.1.0"
  pullPolicy: Always
  pullSecret: "a_secret"

service:
 name: http
 type: NodePort
 externalPort: 7079
 internalPort: 7079

ingress:
 enabled: false

deploy.yml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: {{ template "app.fullname" . }}
  labels:
    app: {{ template "app.name" . }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    metadata:
      labels:
        app: {{ template "app.name" . }}
        release: {{ .Release.Name }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env:

            - name: MY_POD_IP
              valueFrom:
               fieldRef:
                fieldPath: status.podIP
            - name: MY_POD_PORT
              value: "{{ .Values.service.internalPort }}"
          ports:
            - containerPort: {{ .Values.service.internalPort }}
          livenessProbe:
            httpGet:
              path: /actuator/alive
              port: {{ .Values.service.internalPort }}
            initialDelaySeconds: 60
            periodSeconds: 10
            timeoutSeconds: 1
            successThreshold: 1
            failureThreshold: 3
          readinessProbe:
            httpGet:
              path: /actuator/ready
              port: {{ .Values.service.internalPort }}
          initialDelaySeconds: 60
          periodSeconds: 10
          timeoutSeconds: 1
          successThreshold: 1
          failureThreshold: 3
          resources:
{{ toYaml .Values.resources | indent 12 }}
    {{- if .Values.nodeSelector }}
      nodeSelector:
{{ toYaml .Values.nodeSelector | indent 8 }}
    {{- end }}
      imagePullSecrets:
        - name: {{ .Values.image.pullSecret }

service.yml

kind: Service
metadata:
  name: {{ template "app.fullname" . }}
  labels:
    app: {{ template "app.name" . }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.externalPort }}
      targetPort: {{ .Values.service.internalPort }}
      protocol: TCP
      name: {{ .Values.service.name }}
  selector:
    app: {{ template "app.name" . }}
    release: {{ .Release.Name }}

выполнено из мастера

executed from k8 master

выполнено изнутри контейнера того же MicroService

executed from inside a pod of the same MicroService

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Да, когда Мэтью ответил, что вы действительно можете общаться между модулями в Сервисе с Kubernetes, проблема, с которой я столкнулся, заключалась в том, что Istio блокировал запросы друг к другу.

Решение : Отключение инъекции Istio решило эту проблему для меня, затем я включил ее после продолжения подопечных и балансировки нагрузки, надеюсь, это поможет кому-нибудь в будущем.

см. Ответ здесь : Посланник связывается с службой связи внутри Службы в K8

0 голосов
/ 29 января 2019

Можно ли отправить запрос http Rest другому Pod K8, который принадлежит той же службе в Kubernetes?

Конечно, да, именно поэтому каждый Pod вкластер имеет общекластерный маршрутизируемый адрес.Вы можете программно запросить у kubernetes список «пиров» Пода, запросив объект Endpoint, имя которого совпадает с именем Service, а затем вычесть IP-адрес своего Пода.Похоже, что вы вроде как знали об этом с kubectl get ep, но затем вы задали вопрос, поэтому я подумал, что буду откровенен, что ваш опыт не был несчастным случаем.

В Почему я могучтобы получить успешный пинг 1.2.3.4, но не попасть в Rest API?

Мы не можем помочь вам устранить неполадки в вашем приложении без некоторых журналов приложений, но с тем фактом, что вы получили 404 и нет ""отказано в соединении" или 504, или что-то еще означает, что ваша связь работала нормально, просто приложение не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...