首页 > 解决方案 > 在入口控制器后面访问 xpra html5 客户端

问题描述

我正在尝试使用 html5 客户端在 kubernetes 集群上托管和远程访问 kicad(pcb 软件)。

码头文件:

FROM python:3.9.0-slim-buster

RUN apt-get update && apt install  -y \
    software-properties-common \
    wget \ 
    gnupg2 

#install xpra      
RUN wget -q https://xpra.org/gpg.asc -O- | apt-key add - && \
    add-apt-repository "deb https://xpra.org/ buster main" && \
    apt-get update && apt-get install -y  --no-install-recommends xpra xvfb xterm  

##install dependencies
RUN apt-get update && apt install  -y \
    libx11-dev libxcomposite-dev libxdamage-dev \
    libxkbfile-dev \
    openssh-client \
    sshpass \
    python3-paramiko \
    dbus-x11  \
    python3-requests \
    xpra-html5

#install kicad
RUN apt-get update && add-apt-repository -y ppa:kicad/kicad-5.1-releases && \
    apt-get install -y --no-install-recommends kicad \ 
    && rm -rf /var/lib/apt/lists/* 
    
ENV DISPLAY=:0
EXPOSE 8051
CMD  xpra start --start=kicad --no-pulseaudio --bind-tcp=0.0.0.0:8051 --html=on && tail -f /dev/null 

部署文件:

 apiVersion: apps/v1
kind: Deployment
metadata:
  name: kicad-deployment
  labels:
    app: kicad
spec:
  replicas: 2
  selector:
    matchLabels:
      app: kicad
  template:
    metadata:
      labels:
        app: kicad
    spec:
      containers:
      - name: kicad
        image: syashfr/kicad:1.0.0
        ports:
        - containerPort: 8051

服务文件:

apiVersion: v1 
kind: Service 
metadata:
  name: kicad-service 
spec: 
  type: LoadBalancer
  selector:
    app: kicad
  ports:
    - port: 80
      targetPort: 8051

入口文件:

kind: Ingress
metadata:
  name: kicad-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
        - path: /kicad
          backend:
            serviceName: kicad-service 
            servicePort: 80 

我假设 proxy_pass 应该在应用 ingress.yaml 时自动进行,因此我没有像https://xpra.org/trac/wiki/Nginx中所述对 nginx.conf (入口控制器)进行更改

但是,当我尝试访问应用程序时:http://ingress_address/kicad,我得到以下页面而不是应用程序 UI:

在此处输入图像描述

似乎我被路由到我的服务,而不是预期的 UI。但是,我可以通过服务的外部 IP 访问 kicad UI。我在入口处缺少什么?

标签: reverse-proxyx11remote-accesskubernetes-ingressx11-forwarding

解决方案


我已经重现了您的问题并通过稍微修改入口资源来解决它。我的ingress对象清单:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: kicad-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - http:
      paths:
        - path: /kicad/?(.*)
          backend:
            serviceName: kicad-service 
            servicePort: 80

部署和服务 yamls 保持不变。当您尝试访问时,<ingress-IP>/kicad/您将看到预期的 UI。


推荐阅读