#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/
вы увидите ожидаемый пользовательский интерфейс.