Доступ к клиенту xpra html5 за входным контроллером

#reverse-proxy #x11 #remote-access #kubernetes-ingress #x11-forwarding

#обратный прокси-сервер #x11 #удаленный доступ #kubernetes-вход #x11-пересылка

Вопрос:

Я пытаюсь разместить и получить удаленный доступ к kicad (программное обеспечение для печатных плат) в кластере kubernetes с помощью клиента html5.

dockerfile:

 FROM python:3.9.0-slim-buster

RUN apt-get update amp;amp; apt install  -y 
    software-properties-common 
    wget  
    gnupg2 

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

##install dependencies
RUN apt-get update amp;amp; 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 amp;amp; add-apt-repository -y ppa:kicad/kicad-5.1-releases amp;amp; 
    apt-get install -y --no-install-recommends kicad  
    amp;amp; 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 amp;amp; 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, поэтому я не вносил изменений в nginx.conf (входной контроллер), как указано в https://xpra.org/trac/wiki/Nginx

Однако, когда я пытаюсь получить доступ к приложению: http://ingress_address/kicad , я получаю следующую страницу вместо пользовательского интерфейса приложения:

введите описание изображения здесь

Похоже, что я перенаправлен на свой сервис, но не на ожидаемый пользовательский интерфейс. Однако я могу получить доступ к пользовательскому интерфейсу kicad через внешний IP-адрес службы. Чего мне не хватает в ingress?

Комментарии:

1. Можете ли вы поделиться своим файлом Dockerfile?

2. конечно, отредактировано с помощью файла docker

Ответ №1:

Я воспроизвел вашу проблему и решил ее, слегка изменив входной ресурс. Мой 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/ вы увидите ожидаемый пользовательский интерфейс.