React App与Go后端api通信

jrk*_*rkt 0 dns go reactjs kubernetes

我有一个前端React应用程序和一个Go后端服务作为前端的API。两者都是同一名称空间中的Kubernetes服务。在不使用外部IP的情况下如何与Go后端服务通信?我知道它可以与外部ip一起使用,但是我无法让fqdn​​像应该的那样正确解析。前端服务是从nginx:1.15.2-alpinedocker映像构建的。如何获得前端React应用与后端Go服务器通信?

前端service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: ui
  namespace: client
  labels:
    app: ui
spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: https
  selector:
    app: ui
Run Code Online (Sandbox Code Playgroud)

前端Deployment.yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ui
  namespace: client
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 2
  template:
    metadata:
      labels:
        app: ui
    spec:
      containers:
        - name: ui
          image: #######
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 80
Run Code Online (Sandbox Code Playgroud)

后端service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: api
  namespace: client
  labels:
    app: api
spec:
  type: NodePort
  ports:
    - port: 8001
      protocol: TCP
      targetPort: http
      name: http
  selector:
    app: api
Run Code Online (Sandbox Code Playgroud)

后端Deployment.yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: api
  namespace: client
  labels:
    name: api
spec:
  replicas: 1
  revisionHistoryLimit: 2
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: ####
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8001
Run Code Online (Sandbox Code Playgroud)

Dav*_*aze 5

React应用程序不在Kubernetes中运行。 也许您有一个运行在Kubernetes中的开发服务器,但是它只是将HTML和Javascript文件提供给集群外运行的浏览器。浏览器中的应用程序对此“ Kubernetes”一无所知,并且无法解析Kubernetes内部的...svc.cluster.local主机名。它需要一种与集群对话的方法。

由于已将后端配置为NodePort类型服务,因此您可以查找后端的外部可见端口,然后在服务的浏览器应用程序中将后端URL配置为群集中某个节点上的端口号。这有点麻烦和手动。

更好的方法是配置一个入口,以便例如https://.../为您的浏览器应用程序服务并https://.../api到达您的后端。然后,后端URL只能是裸路径/api,它将使用与UI相同的主机名和方案来解释。