Пожалуйста, посмотрите на похожую проблему .
Вы должны знать, что порт контейнера является портом, который слушает контейнер. Порт службы - это порт, на котором служба kubernetes отображается на внутреннем ip кластера и сопоставляется с портом контейнера. Nodeport - это порт, отображаемый на хосте и сопоставленный со службой kubernetes.
NodePort позволяет вам предоставить службу, указав это значение в типе службы. Ingress, с другой стороны, является полностью независимым ресурсом для вашего сервиса. Вы объявляете, создаете и уничтожаете его отдельно для своих услуг. Благодаря сервису типа NodePort вы можете открыть оба порта (31000, 80).
Ваши файлы конфигурации должны выглядеть примерно так:
apiVersion: apps/v1
kind: Deployment
metadata:
name: phpdeployment
spec:
replicas: 3
selector:
matchLabels:
app: phpapp
template:
metadata:
labels:
app: phpapp
spec:
containers:
- image: rajendar38/myhtmlapp:latest
name: php
command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]
ports:
- containerPort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /example
backend:
serviceName: php
servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
name: php
spec:
selector:
app: php
ports:
- port: 31000
targetPort: 80
protocol: TCP
name:
type: NodePort
Затем открыть развертывание:
$ kubectl expose deployment phpdeployment --type=NodePort
Официальная документация: kubernetes-service-nodeport , kubernestes-ingress , kubernetes-развертывание-раскрытие .