我想启动已经在 Kubernetes 中的 Docker 镜像中构建的 Crow cpp 服务器。 Cpp服务器正在监听18080端口:
目前我已经成功启动了 Docker 镜像,并使用命令将 Docker 容器的端口映射到 cpp 服务器:
docker run --name cpp --rm -d -it -p 81:18080 localhost:5000/cpp_test
并且在此设置中运行良好:
现在我正在 Kubernetes 中启动此配置,但每次都会收到 502 bad gateway Nginx 错误。那么我对 Kubernetes 有什么:
1.带有我的服务器推入图像的本地存储库(localhost:5000 / cpp_test);
2.安装了 nginx ingress (https://kubernetes.github.io/ingress-nginx/deploy/);
3.部署+服务yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: cpp-server
namespace: cpp
labels:
app: cpp-server
spec:
replicas: 1
selector:
matchLabels:
app: cpp-server
template:
metadata:
labels:
app: cpp-server
spec:
containers:
- name: cpp-server
image: localhost:5000/cpp_test
imagePullPolicy: IfNotPresent
ports:
- containerPort: 18080
---
apiVersion: v1
kind: Service
metadata:
name: cpp-server
namespace: cpp
spec:
selector:
app: cpp-server
type: LoadBalancer
ports:
- protocol: TCP
port: 8081
targetPort: 18080
4 入口yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: root-ingress
namespace: cpp
annotations:
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: cpp-server
port:
number: 8081
应用所有 yaml 后,我得到以下 Kubernetes 状态:
当我尝试访问我的应用程序时,我收到 502 bad gateway:
我哪里做错了?或者我忘了提到什么?也许应该在部署的 pod 部分指定一些额外的端口信息?因为在docker中并没有显示kuber pod中有容器的端口映射。
查看您的清单,尝试做这两件事
您不需要“LoadBalancer”服务。当您使用入口时,只需“ClusterIP”服务就足够了。 从您的服务中删除以下行(如果您不提及“类型”,Kubernetes 默认为“ClusterIP”服务类型)
type: LoadBalancer
根据您共享的控制台输出,您的后端服务似乎不支持“HTTPS”。 将入口注释更改为“HTTP”
nginx.ingress.kubernetes.io/backend-protocol: HTTP