Я установил небольшой кластер Kubernetes на Raspberry Pi, в настоящее время состоящий из 1 мастера и 1 рабочего. Я создал простое развертывание NGINX и создал для этого сервис NodePort. Мой YAML выглядит следующим образом:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
app: nginx
spec:
selector:
app: nginx
type: NodePort
ports:
- nodePort: 30333
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
protocol: TCP
restartPolicy: Always
PODS запущены и работают, как и служба
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-5d66cc795f-bgqdp 1/1 Running 0 65m
nginx-5d66cc795f-mb8qw 1/1 Running 0 65m
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d
nginx-service NodePort 10.104.133.199 <none> 80:30333/TCP 66m
Но я не могу получить доступ к NGINX с главного узла.
curl http://192.168.178.101:30333
curl: (7) Failed to connect to 192.168.178.101 port 30333: Connection timed out
Если я пытаюсь с рабочего узла, он работает нормально, и NGINX отвечает. С рабочего узла я могу использовать IP-адрес: 30333 или имя хоста: 30333, хотя localhost: 30333 не работает!
Связь с моего Master to Worker выглядит нормально. Я могу пинговать, S SH оттуда и c. либо по IP-адресу, либо по имени хоста.
Есть идеи, что я сделал неправильно?
Вывод из узлов get -o wide:
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8-master Ready master 13d v1.17.4 192.168.178.100 <none> Raspbian GNU/Linux 10 (buster) 4.19.97-v7+ docker://19.3.8
k8-w1 Ready worker 13d v1.17.4 192.168.178.101 <none> Raspbian GNU/Linux 10 (buster) 4.19.97-v7+ docker://19.3.8
Вывод из службы описаний:
$ kubectl describe service nginx-service
Name: nginx-service
Namespace: default
Labels: app=nginx
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"nginx"},"name":"nginx-service","namespace":"default"},"s...
Selector: app=nginx
Type: NodePort
IP: 10.104.133.199
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 30333/TCP
Endpoints: 10.44.0.1:80,10.44.0.2:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
Обновление: я попробовал простую команду Te lnet для Рабочего на NodePort 30333. Но я получаю ошибку тайм-аута соединения.
Итак, я удалил службу NodePort и попробовал простую команду Port forward
kubectl port-forward pod/nginx-545b8fdd47-brg7r 8080:80
Это сработало, и я мог подключиться через Master -> Worker через этот порт.
Но служба NodePort по-прежнему не работает!