簡體   English   中英

kube.netes Internal Service IP 找不到pod

[英]Kubernetes Internal Service IP cannot find pod

我有以下 pod 定義來運行 nginx 的基本實例

---
apiVersion: v1
kind: Pod
metadata:
  name: basic
  labels:
    appName: static-website
spec:
  containers:
      - image: nginx
        name: basic

我做了以下服務定義

apiVersion: v1
kind: Service
metadata:
  name: web-service-local
spec:
  type: NodePort
  ports:
   - targetPort: 80
     port: 80
     nodePort: 30080
  selector:
    appName: static-website

❌ 當我嘗試通過服務 IP 訪問 nginx 頁面時,它卡住了

  • kubectl exec --stdin --tty basic -- /bin/bash
  • curl web-service-local

我已成功驗證

  • ✅當我運行kubectl get pods時,pod 運行正常
NAME    READY   STATUS    RESTARTS   AGE
basic   1/1     Running   0          7m22s
  • 服務選擇器匹配 pod label
    • kubectl describe svc web-service-local | grep Selector | awk '{print $2}'
    • kubectl describe pod basic | grep Labels | awk '{print $2}'
  • ✅我可以連接到 pod 並且 nginx 正在運行
    • kubectl exec --stdin --tty basic -- /bin/bash
    • curl localhost檢索標准 nginx 主頁。
  • ✅ 我可以連接到 pod,nginx 正在運行,可以通過 IP 地址連接
    • kubectl get pods -l appName=static-website -o go-template='{{range.items}}{{.status.podIP}}{{"\n"}}{{end}}' ,返回POD IP
    • kubectl exec --stdin --tty basic -- /bin/bash
    • apt update && apt upgrade && apt install dnsutils -y
    • curl **POD IP** ( POD IP ) 來自第一個命令
  • ✅我可以驗證服務和 pod 都在默認命名空間中
    • kubectl get pod basic --namespace default顯示 pod
    • kubectl get svc web-service-local --namespace default
  • ✅我可以驗證 DNS 已經設置好了
    • kubectl exec --stdin --tty basic -- /bin/bash
    • apt update && apt upgrade && apt install dnsutils -y
    • nslookup web-service-localnslookup web-service-local.defaultnslookup web-service-local.default.svc.cluster.local都返回相同的
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   web-service-local.default.svc.cluster.local
Address: 10.106.61.252

✅ 我已驗證我可以通過端點 IP 訪問 nginx

  • kubectl describe svc web-service-local | grep Endpoints | awk '{print $2}' kubectl describe svc web-service-local | grep Endpoints | awk '{print $2}'端點 IP
  • kubectl exec --stdin --tty basic -- /bin/bash
  • curl **Endpoint IP**

由於您有 NodePort 服務類型實現,請嘗試使用瀏覽器中的 nodeIP:NodePort 或執行 curl 作為 NodePort 服務是將外部流量直接獲取到您的服務的最原始方式。 顧名思義,NodePort 在所有節點(VM)上打開一個特定端口,發送到該端口的任何流量都將轉發到該服務。

curl -kvv Nodeip:NodePort 

配置有效。 問題出在我的本地 Minikube 設置上。 一旦我搬到 AKS 就好了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM