【问题标题】:How to change the URL from localhost to service iinside a pod in Kubernetes如何在 Kubernetes 的 Pod 中将 URL 从 localhost 更改为服务器
【发布时间】:2020-06-21 06:31:43
【问题描述】:

我有一个在纯 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 收到拒绝连接错误。我在哪里偏离轨道?

【问题讨论】:

    标签: docker kubernetes-pod kubernetes-service kubernetes-deployment


    【解决方案1】:

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

    你有几个选择:

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

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

    【讨论】:

    • 谢谢@snormore。我意识到我没有为我正在创建的服务指定命名空间的错误。
    猜你喜欢
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2013-04-17
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多