открытая служба nodeport microk8s отказывается от подключения

#docker #kubernetes #microk8s #kubernetes-networking

Вопрос:

На моем сервере в microk8s я создал службу kubernetes, которая доступна через порт NodePort, но она отказывается от подключения. Я не уверен, почему. Независимо от того, пытаюсь ли я подключиться по телетайпу к порту NodePort (31000), он всегда отказывается от подключения. Аналогичная услуга предоставляется надстройкой microk8s (реестр), которая прослушивает порт 32000. Подключение к этому порту с самого хоста, как извне, работает нормально. Брандмауэр не запущен, ufw отключен.

Это и есть услуга:

 apiVersion: v1
kind: Service
metadata:
  namespace: openvpn
  name: openvpn
  labels:
    app: openvpn
spec:
  selector:
    app: openvpn
  type: NodePort
  ports:
    - name: openvpn
      nodePort: 31000
      port: 1194
      targetPort: 1194
status:
  loadBalancer: {}
 

Это мое развертывание:

 apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: openvpn
  name: openvpn
  labels:
    app: openvpn
spec:
  replicas: 1
  selector:
    matchLabels:
      app: openvpn
  template:
    metadata:
      labels:
        app: openvpn
    spec:
      containers:
      - image: private.registry.com/myovpn:1
        name: openvpn-server
        imagePullPolicy: Always
        ports:
        - containerPort: 1194
        securityContext:
          capabilities:
            add:
              - NET_ADMIN
 

Это созданная служба:

 NAME      TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
openvpn   NodePort   10.152.183.80   <none>        1194:31000/UDP   9m19s
 

И вот его описание:

 Name:                     openvpn
Namespace:                openvpn
Labels:                   app=openvpn
                          app.kubernetes.io/managed-by=Helm
Annotations:              meta.helm.sh/release-name: openvpn
                          meta.helm.sh/release-namespace: openvpn
Selector:                 app=openvpn
Type:                     NodePort
IP Families:              <none>
IP:                       10.152.183.80
IPs:                      10.152.183.80
Port:                     openvpn  1194/UDP
TargetPort:               1194/TCP
NodePort:                 openvpn  31000/UDP
Endpoints:                10.1.246.217:1194
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
 

Конечная точка присутствует:

 NAME      ENDPOINTS           AGE
openvpn   10.1.246.228:1194   110m
 

получить узлы — вывод по потоку:

 NAME       STATUS   ROLES    AGE   VERSION                     INTERNAL-IP      EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
hostname   Ready    <none>   24d   v1.20.7-34 df7df22a741dbc   194.xxx.xxx.xxx  <none>        Ubuntu 20.04.2 LTS   5.4.0-73-generic   containerd://1.3.7
 

Файл Dockerfile очень прост. Просто основы:

 FROM alpine:3

ENV HOST=""
RUN apk add openvpn
RUN mkdir -p /opt/openvpn/sec

COPY ./run.sh /opt/openvpn
RUN chmod  x /opt/openvpn/run.sh

COPY ./openvpn.conf /opt/openvpn
COPY ./sec/srv.key /opt/openvpn/sec
COPY ./sec/srv.crt /opt/openvpn/sec
COPY ./sec/ca.crt /opt/openvpn/sec
COPY ./sec/dh2048.pem /opt/openvpn/sec

ENTRYPOINT ["/bin/sh", "/opt/openvpn/run.sh"]
 

И сценарий запуска:

 #!/bin/sh
mkdir -p /dev/net
mknod /dev/net/tun c 10 200
openvpn --config /opt/openvpn/openvpn.conf --local 0.0.0.0
 

Ничего особенного. Есть идеи, почему это не работает?

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

1. создаются ли конечные точки для службы? (kubectl получает конечные точки)

2. Спасибо за вашу помощь. Да, конечная точка присутствует. Просто добавил это в сообщение.

3. хммм, это странно. можете ли вы попробовать «kubectl get nodes-o wide» проверить, получаете ли вы внешний ip-адрес и пытаетесь получить доступ к своей службе с помощью внешнего ip:nodeport?

4. Хм… Внешнего IP-адреса нет, но в любом случае я могу связаться с реестром из внешнего через ВНУТРЕННИЙ IP:порт узла реестра. Подключение openvpn не удается. P.S. Обновил сообщение с выводом запрошенной команды.

5. тогда я сам немного в растерянности. прости =/