Кубернетес: связь между контейнерами, расположенными в разных контейнерах - PullRequest
1 голос
/ 21 марта 2019

У меня есть два микросервиса, которые общаются по протоколу http.

  • AC6K: микросервис C #, который получает данные от устройства Atlas Copco 6000.

  • LocalWriter: приложение на Python, которое получает данные из AC6K и сохраняетинформация в базе данных

Я проверил ее в средах Windows и Linux, и она отлично работает.Когда я концентрирую каждую микросервисную систему и выполняю развертывание, связь отсутствует.Ниже приведены прилагаемые файлы Docker и yaml, используемые для создания контейнера и развертывания файла приложения

ac6k:

FROM microsoft/aspnetcore-build

EXPOSE 5010

WORKDIR /app

COPY . .

RUN dotnet restore

ENTRYPOINT ["dotnet", "ac6kcore.dll"]




-  ac6kUp.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: ac6kcore
      labels:
        run: ac6kcore  
    spec:
      type: NodePort
      ports: 
      - port: 5010
        name: ac6kcore
        targetPort: 5010
        nodePort: 32766
        protocol: TCP
      selector:
        run: ac6kcore
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: ac6kcore
    spec:
      selector:
        matchLabels:
          run: ac6kcore
      replicas: 1
      template:
        metadata:
          labels:
            run: ac6kcore
        spec:
          hostNetwork: true
          containers:
          - image: afierro/ac6kcore:lw
            name: ac6kcore
            ports:
            - containerPort: 5010
          restartPolicy: Always

Файл Docker локального писателя:

FROM python:3.6

RUN mkdir -p /mongodbapp

WORKDIR /mongodbapp

COPY requirements.txt /mongodbapp

RUN pip install --no-cache-dir -r requirements.txt

ADD . /mongodbapp

EXPOSE 9090

CMD ["python", "runapp.py"]

- LocalWriter.yaml

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
  name: localwriter
  labels:
    app: localwriter
spec:
  type: NodePort
  ports:
  - port: 9090
    name: localwriter
    targetPort: 9090
    nodePort: 32756
    protocol: TCP
  selector:
    app: localwriter
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: localwriter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: localwriter
  template:
    metadata:
      labels:
        app: localwriter
    spec:
      containers:
      - name: flasknode
        image: afierro/localwriter:v1
        imagePullPolicy: Always
        ports:
        - containerPort: 9090

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 22 марта 2019

В соответствии с рекомендацией Леандро Доницетти Соареш я ввел следующие команды, чтобы увидеть переменные среды, и результаты кажутся мне излишними.

kubectl get pods

NAME                           READY   STATUS    RESTARTS   AGE
ac6kcore-77bc4c4987-dxn29      1/1     Running   0          14m
localwriter-55467c5495-px8m4   1/1     Running   0          14m
mongo                          1/1     Running   0          14m

kubectl exec ac6kcore-77bc4c4987-dxn29 -- printenv | grep SERVICE   

AC6KCORE_SERVICE_PORT_AC6KCORE=5010
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT_HTTPS=443
AC6KCORE_SERVICE_PORT=5010
AC6KCORE_SERVICE_HOST=10.107.208.212
LOCALWRITER_SERVICE_HOST=10.100.103.114
LOCALWRITER_SERVICE_PORT=9090
LOCALWRITER_SERVICE_PORT_LOCALWRITER=9090
KUBERNETES_SERVICE_PORT=443

kubectl exec localwriter-55467c5495-px8m4 -- printenv | grep SERVICE    

KUBERNETES_SERVICE_HOST=10.96.0.1
LOCALWRITER_SERVICE_PORT_LOCALWRITER=9090
AC6KCORE_SERVICE_PORT_AC6KCORE=5010
KUBERNETES_SERVICE_PORT=443
AC6KCORE_SERVICE_HOST=10.107.208.212
LOCALWRITER_SERVICE_PORT=9090
KUBERNETES_SERVICE_PORT_HTTPS=443
AC6KCORE_SERVICE_PORT=5010
LOCALWRITER_SERVICE_HOST=10.100.103.114
1 голос
/ 21 марта 2019

Служба используется для связи модуля в одном развертывании с модулем в другом развертывании.

Проверьте услуги здесь:

https://kubernetes.io/docs/concepts/services-networking/service/

Убедитесь, что у вас есть правильный селектор в услуге.

Вы можете использовать переменные env, которые находятся внутри модуля, для вызова другой службы.Kubernetes запускает модули с ip и портом службы как env vars, чтобы проверить это, вы можете запустить ssh в модуле и использовать команду printenv.

...