#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. тогда я сам немного в растерянности. прости =/