Как узнать, какой модуль обрабатывает запрос? - PullRequest
0 голосов
/ 10 февраля 2019

Я использовал этот Deployment.yml для создания модулей.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: price-calculation-deployment
  labels:
    app: price-calculation
spec:
  replicas: 2
  selector:
    matchLabels:
      app: price-calculation
  template:
    metadata:
      labels:
        app: price-calculation
    spec:
      containers:
        - name: price-calculation
          image: ${somewhere}/price-calculation:latest
          ports:
            - containerPort: 80
              protocol: TCP
        - name: pc-mongodb
          image: mongo:latest
          ports:
            - containerPort: 27017
              protocol: TCP
      imagePullSecrets:
        - name: acr-auth

И позже я использовал этот Service.yml, чтобы выставить порт на внешний.

apiVersion: v1
kind: Service
metadata:
  name: price-calculation-service
spec:
  type: LoadBalancer
  ports:
    - port: 5004
      targetPort: 80
      protocol: TCP
  selector:
    app: price-calculation

Наконец,оба работают сейчас.Хорошо.

Когда я настроил LoadBalancer в Service.yml, LoadBalancer отправляет запросы на 2 реплики / модули.

Теперь я хочу знать, какой модульпринимает запрос и откуда мне это знать?

Спасибо !!!

Ответы [ 3 ]

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

Добавление имени модуля в ответ, который отображается в браузере пользователя.Так вы узнаете, какой модуль обрабатывает запрос

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

Вы можете просмотреть журналы pod, чтобы увидеть запросы, сделанные к pod:

 kubectl logs my-pod                                           # dump pod logs (stdout)

 kubectl logs my-pod -c my-container                 # dump pod container logs (stdout, multi-container case)

Или добавить к ответу в самом приложении, например, в приложении Nodejs это может выглядеть так:

const http = require('http');
const os = require('os');

var handler = function(request, response) {
  response.writeHead(200);
  response.end("You have hit " + os.hostname() + "\n");
};

var app = http.createServer(handler);

app.listen(8080);

Затем вы можете использовать curl, чтобы протестировать ваш сервис и получить ответ:

Request:
curl http://serviceIp:servicePort

Response:
You have hit podName

В зависимости от языка программирования приложения, просто найдите модуль / библиотеку, которая предоставляет служебный метод для полученияимя хоста, и вы будете готовы вернуться к нему в ответе для целей отладки.

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

Что ж, самый простой способ - заставить стручки указывать свою личность в ответе, чтобы вы знали, какой стручок отвечает.Другой способ - реализовать распределенную трассировку с помощью Zipkin \ Jaeger.Это даст вам глубокое понимание сетевых потоков.

Я полагаю, что kubernetes не предлагает какой-либо встроенной сетевой трассировки.

...