0

我有一个在纯 docker 环境中运行的应用程序。我想在 k8s 中部署它。因此,我创建了配置映射、部署等。下面是部署到 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收到连接被拒绝错误。我在哪里偏离轨道?

4

1 回答 1

1

看起来您的 Service 是在default命名空间中创建的,因为您没有metadata.namespace明确提供值。另一方面,您的部署指定metadata.namespace{{ .Values.namespace }}(看起来您正在使用 Helm)。

你有几个选择:

  1. 在与您的部署相同的命名空间中创建您的服务{{ .Values.namespace }},在这种情况下,您可以继续使用 fin-service在您的配置中引用该服务,或者
  2. 将您的配置更新为 reference fin-service.default,因为<service-name>.<namespace>也将解析为您的服务。您还需要确保您的部署在default命名空间中运行,否则您的服务 pod 选择器将找不到任何部署 pod。

查看关于服务和 Pod 的DNS的 Kubernetes 文档,了解有关如何在集群中访问服务和 Pod 的更多信息。

于 2020-04-09T18:51:11.337 回答