root@Master:~# cat new-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: zero-pod
labels:
app: my-ns
spec:
containers:
- image: nginx
name: zero-pod
root@Master:~# cat nps.yaml
apiVersion: v1
kind: Service
metadata:
name: my-ns
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: my-ns
type: NodePort
root@Master:~# kubectl get svc my-ns
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-ns NodePort 10.105.183.144 <none> 80:30007/TCP 48m
root@Master:~# curl 10.2.0.4:30007
curl: (7) Failed to connect to 10.2.0.4 port 30007: Connection refused
Я создал еще один простой модуль helloworld, подключенный к той же службе nodeport, и он работает.
root@Master:~# curl 10.2.0.4:30007
Hello, world!
Version: 2.0.0
Hostname: pod-theta
Какова основная вещь, которую я упускаю в этом, или мы вообще не можем подключить сервер nginx к nodeport.
Если нет, я вижу, что nginx подключается к nodeport через развертывание, как это работает, может кто-нибудь пролить свет на это ??
Сервис nginx
в официальном nginx
контейнере слушает порт 80
, а не порт 8080
. Вам нужно обновить настройку targetPort
в вашем Service
:
apiVersion: v1
kind: Service
metadata:
name: my-ns
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: my-ns
type: NodePort
Хотя это и не обязательно, я бы определил порт в вашем Pod
манифесте, возможно, с именем, чтобы в итоге вы получили этот Pod
манифест:
apiVersion: v1
kind: Pod
metadata:
name: zero-pod
labels:
app: my-ns
spec:
containers:
- image: nginx
name: zero-pod
ports:
- containerPort: 80
name: http
А это Service
:
apiVersion: v1
kind: Service
metadata:
name: my-ns
spec:
ports:
- port: 80
protocol: TCP
targetPort: http
selector:
app: my-ns
type: NodePort
Спасибо @larsks, это сработало после обновления целевого порта до 80.