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)
React应用程序不在Kubernetes中运行。 也许您有一个运行在Kubernetes中的开发服务器,但是它只是将HTML和Javascript文件提供给集群外运行的浏览器。浏览器中的应用程序对此“ Kubernetes”一无所知,并且无法解析Kubernetes内部的...svc.cluster.local主机名。它需要一种与集群对话的方法。
由于已将后端配置为NodePort类型服务,因此您可以查找后端的外部可见端口,然后在服务的浏览器应用程序中将后端URL配置为群集中某个节点上的端口号。这有点麻烦和手动。
更好的方法是配置一个入口,以便例如https://.../为您的浏览器应用程序服务并https://.../api到达您的后端。然后,后端URL只能是裸路径/api,它将使用与UI相同的主机名和方案来解释。