微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在入口控制器后面访问 xpra html5 客户端

如何解决在入口控制器后面访问 xpra html5 客户端

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

dockerfile:

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 

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

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

enter image description here

我似乎被路由到我的服务,但没有被路由到预期的 UI。但是,我可以通过服务的外部 IP 访问 kicad UI。我在 ingress 中遗漏了什么?

解决方法

我已经重现了您的问题并通过稍微修改入口资源解决了它。我的 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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。