K8:无法使用nginx反向代理连接Pod



我是Kubernetes的新手,我正试图在我们的内部计算服务系统中使用Kubernete托管一个应用程序。

由于我们的内部计算服务不支持rewrite-target注释,我不得不使用反向代理来处理重写。

所以,我的流程是:VIP->服务->Pod[具有nginx重写的Sidecar]->Pod〔应用程序容器〕

以下是清单:

# Source: reportportal/templates/gateway-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: reportportal-gateway-ingress
labels:     
heritage: "Helm"
release: "reportportal"
chart: reportportal-5.2.1
app: "reportportal"
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: reportportal-ui
servicePort: headless

---
# Source: reportportal/templates/ui-service.yaml
apiVersion: v1
kind: Service
metadata:
name: reportportal-ui
labels:     
heritage: "Helm"
release: "reportportal"
chart: reportportal-5.2.1
app: "reportportal"
annotations:
service: ui
infoEndpoint: /info
spec:
ports:
- name: headless
port: 5000
protocol: TCP
targetPort: 5000
selector:
component: reportportal-ui
type: ClusterIP


---
# Source: reportportal/templates/ui-config-map.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: ui-nginx-conf
labels:
sdr.appname: reportportal
data:
nginx.conf: |-
user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
worker_connections  1024;
}
http {
keepalive_timeout  65;
upstream ui {
server 127.0.0.1:8080;
}
server {
listen 5000;
location / {
#rewrite  /(ui)/?(.*)  /$2;
proxy_pass         http://ui;
proxy_redirect     off;
}
}
}
---
# Source: reportportal/templates/ui-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: reportportal-ui
labels:     
heritage: "Helm"
release: "reportportal"
chart: reportportal-5.2.1
app: "reportportal"
spec:
replicas: 1
selector:
matchLabels:
component: reportportal-ui
template:
metadata:
labels:
component: reportportal-ui
annotations:
spec:
containers:
- name: uinginx
image: nginx:alpine
ports:
- containerPort: 5000
protocol: TCP
volumeMounts:
- name: nginx-proxy-config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
- name: ui
image: "reportportal/service-ui:5.2.2"
env:
- name: RP_SERVER_PORT
value: "8080"
resources:
requests:
cpu: 100m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
readinessProbe:
httpGet:
path: "/health"
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 3
volumes:
- name: nginx-proxy-config
configMap:
name: ui-nginx-conf

securityContext:
{}
serviceAccountName:
...

我正在使用Minikube(在我的本地机器中),当我试图点击URL时,我得到了";404未找到";页

这里的问题是,服务无法连接Pod〔Sidecar〕!

有人能帮忙解决这个问题吗?

提前感谢!

尝试使用:

# MacOS
minikube start --driver=docker
kubectl apply -f file-with-all-the-manifests.yaml

它对我很有用‍♂️.

来自同一命名空间上的调试pod:

/ # curl reportportal-ui:5000
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<title>Report Portal</title>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="shortcut icon" href="favicon.ico"><link href="styles.535fa1.css" rel="stylesheet"><link href="main.535fa1.css" rel="stylesheet"></head>
<body>
<div id="app" style="width: 100%; height: 100%"></div>
<div id="popover-root"></div>
<div id="modal-root"></div>
<div id="tooltip-root"></div>
<div id="notification-root"></div>
<div id="screen-lock-root"></div>
<script type="text/javascript" src="polyfills.app.535fa1.js"></script><script type="text/javascript" src="styles.app.535fa1.js"></script><script type="text/javascript" src="main.app.535fa1.js"></script></body>
</html>
/ #

也适用于Nginx sidecar容器:

/ # curl 127.0.0.1:8080
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<title>Report Portal</title>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="shortcut icon" href="favicon.ico"><link href="styles.535fa1.css" rel="stylesheet"><link href="main.535fa1.css" rel="stylesheet"></head>
<body>
<div id="app" style="width: 100%; height: 100%"></div>
<div id="popover-root"></div>
<div id="modal-root"></div>
<div id="tooltip-root"></div>
<div id="notification-root"></div>
<div id="screen-lock-root"></div>
<script type="text/javascript" src="polyfills.app.535fa1.js"></script><script type="text/javascript" src="styles.app.535fa1.js"></script><script type="text/javascript" src="main.app.535fa1.js"></script></body>
</html>
/ #

它可能是在您运行的任何环境中建立网络。您的内部计算系统或minikube。查看是否没有吊舱崩溃:

kubectl get pods --all-namespaces

✌️

最新更新