我有一個使用以下內容創建的正在運行的 pod pod-definition.yaml:
apiVersion: v1
kind: Pod
metadata:
name: microservice-one-pod-name
labels:
app: microservice-one-app-label
type: front-end
spec:
containers:
- name: microservice-one
image: vismarkjuarez1994/microserviceone
ports:
- containerPort: 2019
然后我使用以下內容創建了一個服務service-definition.yaml:
kind: Service
apiVersion: v1
metadata:
name: microserviceone-service
spec:
ports:
- port: 30008
targetPort: 2019
protocol: TCP
selector:
app: microservice-one-app-label
type: NodePort
然后我跑去kubectl describe node minikube尋找我應該連接到的節點 IP——結果如下:
Addresses:
InternalIP: 192.168.49.2
Hostname: minikube
但是當我運行以下 curl 命令時,我沒有得到任何回應:
curl 192.168.49.2:30008
當我嘗試192.168.49.2:30008從瀏覽器訪問時,請求也會超時。
pod 日志顯示容器已啟動并正在運行。為什么我無法訪問我的服務?
uj5u.com熱心網友回復:
問題是您試圖通過引數訪問您的服務,該port引數是服務將被公開的內部埠,即使使用NodePorttype.
您正在搜索的引數稱為,可以選擇與和nodePort一起指定。參考檔案:porttargetPort
默認情況下,為了方便起見,Kubernetes 控制平面將從一個范圍內分配一個埠(默認值
30000-32767:)
由于您沒有指定nodePort,因此會自動選擇范圍內的一個。您可以通過以下方式檢查哪一個:
kubectl get svc -owide
然后在該埠從外部訪問您的服務。
作為替代方案,您可以將服務定義更改為:
kind: Service
apiVersion: v1
metadata:
name: microserviceone-service
spec:
ports:
- port: 30008
targetPort: 2019
nodePort: 30008
protocol: TCP
selector:
app: microservice-one-app-label
type: NodePort
但請記住,您可能需要洗掉您的服務并重新創建它才能更改nodePort分配。
uj5u.com熱心網友回復:
我認為您錯過了服務中的埠:
apiVersion: v1
kind: Pod
metadata:
name: microservice-one-pod-name
labels:
app: microservice-one-app-label
type: front-end
spec:
containers:
- name: microservice-one
image: vismarkjuarez1994/microserviceone
ports:
- containerPort: 2019
你的服務應該是這樣的:
kind: Service
apiVersion: v1
metadata:
name: microserviceone-service
spec:
ports:
- port: 2019
targetPort: 2019
nodePort: 30008
protocol: TCP
selector:
app: microservice-one-app-label
type: NodePort
如果您想使用 Minikube 嘗試 Ingress,您可以在啟用 Minikube Ingress 后訪問您的應用程式。
minikube addons enable ingress
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/452918.html
標籤:Kubernetes Kubernetes-pod Kubernetes 服务
