Как изменить URL с локального хоста на сервисный модуль в Кубернетесе - PullRequest
0 голосов
/ 09 марта 2020

У меня есть приложение, работающее в чистой среде docker. Я хотел развернуть это в k8s. Поэтому я создал карты конфигурации, развертывания и т. Д. c. Ниже приведен файл конфигурации перед развертыванием на k8s.

  config:
    message:
      - type: "fusion:expense:expense_type:v1"
        versions:
          - version: "v1"
            handler:
              request_uri: "http://localhost:8082/api/v1/expenses/"
          - version: "v2"
            handler:
              request_uri: "http://localhost:8082/api/v2/expenses/"
      - type: "card_type"
        versions:
          - version: "v1"
            handler:
              request_uri: "http://localhost:8082/api/v1/cardtype"
    ossprovider:
      endpoint: "http://localhost:19000"

adaptors:
  endpoint: http://localhost:8092/adaptors/

Я создал службу типа

kind: Service
metadata:
  name: fin-service
spec:
  type: ClusterIP
  ports:
    - port: 8090
      targetPort: 8090 
      protocol: TCP
      name: http
    - port: 8082
      targetPort: 8082 
      protocol: TCP
    - port: 19000
      targetPort: 19000
      protocol: TCP
  selector:
    fin-app

Мое развертывание выглядит следующим образом:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: fin
  namespace: {{ .Values.namespace }}
  labels:
    fin
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      fin
  template:
    metadata:
      labels:
        fin
    spec:
    {{- with .Values.imagePullSecrets }}
      imagePullSecrets:
        {{- toYaml . | nindent 8 }}
    {{- end }}
      containers:
        - name: {{ .Values.containers.oss_messaginglayer.name }}
          image: {{ .Values.image.oss_messaginglayer.repository }}
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - name: http
              containerPort: 8090
              protocol: TCP

Поскольку я создал службу, я хотел использовать эту конечную точку службы в файле конфигурации как fin-service вместо localhost.

app:
  config:
    message:
      - type: "fusion:expense:expense_type:v1"
        versions:
          - version: "v1"
            handler:
              request_uri: "http://fin-service:8082/api/v1/expenses/"
          - version: "v2"
            handler:
              request_uri: "http://fin-service:8082/api/v2/expenses/"
      - type: "card_type"
        versions:
          - version: "v1"
            handler:
              request_uri: "http://fin-service:8082/api/v1/cardtype"
    ossprovider:
      endpoint: "http://fin-service:19000"

adaptors:
  endpoint: http://fin-service:8092/adaptors/

Но я получаю сообщение об отказе в соединении на http://fin-service: 19000 . Куда я иду с трассы?

1 Ответ

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

Похоже, ваша служба создается в пространстве имен default, поскольку вы явно не предоставляете значение metadata.namespace. С другой стороны, в вашем развертывании для metadata.namespace указано {{ .Values.namespace }} (похоже, вы используете Helm).

У вас есть пара вариантов:

  1. Создайте свой Служба в том же пространстве имен, что и ваше Развертывание, {{ .Values.namespace }}, в этом случае вы можете продолжить использовать fin-service для ссылки на службу в вашей конфигурации или
  2. Обновите вашу конфигурацию до ссылки fin-service.default, начиная с <service-name>.<namespace> также разрешит к вашим услугам. Вам также нужно убедиться, что ваше Deployment запущено в пространстве имен default, иначе ваш селектор служебных модулей не найдет ни одного из модулей развертывания.

Ознакомьтесь с документацией Kubernetes по DNS для служб и модулей для получения дополнительной информации о доступе к службам и модулям в кластере.

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