gpt4 book ai didi

reactjs - 无法使用Kubernetes连接到React js应用的api服务器?

转载 作者:行者123 更新时间:2023-12-02 11:47:08 26 4
gpt4 key购买 nike

我基本上试图运行一个主要由3个服务组成的react js应用程序,即postgres db,API服务器和UI前端(使用nginx服务)。当前该应用程序在开发模式下使用docker-compose按预期工作,但是当我尝试要使用kubernetes在生产环境中运行此程序,我无法访问该应用程序的api服务器(连接被拒绝)。

由于我想使用kubernetes在生产环境中运行此程序,因此我为每个服务创建了yaml文件,然后尝试使用kubectl apply运行它们。我也尝试过在api服务器上使用或不使用持久卷的情况。这有所帮助。

Docker-compose文件(这可以工作,并且我能够在端口8000上连接到api服务器)

version: "3"

services:
pg_db:
image: postgres
networks:
- wootzinternal
ports:
- 5432
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_USER=postgres
- POSTGRES_DB=wootz
volumes:
- wootz-db:/var/lib/postgresql/data
apiserver:
image: wootz-backend
volumes:
- ./api:/usr/src/app
- /usr/src/app/node_modules
build:
context: ./api
dockerfile: Dockerfile
networks:
- wootzinternal
depends_on:
- pg_db
ports:
- '8000:8000'
ui:
image: wootz-frontend
volumes:
- ./client:/usr/src/app
- /usr/src/app/build
- /usr/src/app/node_modules
build:
context: ./client
dockerfile: Dockerfile
networks:
- wootzinternal
ports:
- '80:3000'

volumes:
wootz-db:

networks:
wootzinternal:
driver: bridge


我的api服务器Yaml在Kubernetes中运行(这不起作用,我无法在端口8000上连接到api服务器)
apiVersion: v1
kind: Service
metadata:
name: apiserver
labels:
app: apiserver
spec:

ports:
- name: apiport
port: 8000
targetPort: 8000

selector:
app: apiserver
tier: backend

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: apiserver
labels:
app: apiserver
spec:
selector:
matchLabels:
app: apiserver
tier: backend
strategy:
type: Recreate
template:
metadata:
labels:
app: apiserver
tier: backend
spec:

containers:
- image: suji165475/devops-sample:corspackedapi
name: apiserver
env:
- name: POSTGRES_DB_USER
value: postgres
- name: POSTGRES_DB_PASSWORD
value: password
- name: POSTGRES_DB_HOST
value: postgres
- name: POSTGRES_DB_PORT
value: "5432"
ports:
- containerPort: 8000
name: myport

我应该对我的api服务器yaml(kubernetes)进行哪些更改。以便可以在端口8000上访问它。当前出现连接拒绝错误。

最佳答案

Kubernetes上的默认服务是ClusterIP,用于在集群内部提供服务,但不向外部公开该服务。

这是使用LoadBalancer类型的服务:

apiVersion: v1
kind: Service
metadata:
name: apiserver
labels:
app: apiserver
spec:
type: LoadBalancer
ports:
- name: apiport
port: 8000
targetPort: 8000
selector:
app: apiserver
tier: backend

这样,您可以通过运行 kubectl describe service apiserver来查看该服务如何期望具有外部IP地址

如果您想更好地控制将请求路由到该服务的方式,可以在该服务的前面添加一个Ingress。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
labels:
app: apiserver
name: apiserver
spec:
rules:
- host: apiserver.example.com
http:
paths:
- backend:
serviceName: apiserver
servicePort: 8000
path: /*

关于reactjs - 无法使用Kubernetes连接到React js应用的api服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57265173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com