簡體   English   中英

無法從 minikube 獲取 ClusterIP 服務 URL

[英]Unable to get ClusterIP service url from minikube

我根據下面的配置文件創建了一個 ClusterIP 服務,但是我似乎無法從 minikube 獲取該服務的 URL

k create -f service-cluster-definition.yaml
➜ minikube service myapp-frontend --url                                           
😿  service default/myapp-frontend has no node port

如果我嘗試將 NodePort 添加到 service-cluster-definition.yaml 的端口部分,它會報錯,該鍵已被棄用。

我錯過了什么或做錯了什么?

服務集群定義.yaml

apiVersion: v1
kind: Service
metadata:
  name: myapp-frontend
spec:
  type: ClusterIP
  ports:
    - targetPort: 80
      port: 80
  selector:
    app: myapp
    type: etl

部署定義.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  labels:
    app: myapp
    env: experiment
    type: etl
spec:
  template:
    metadata:
      name: myapp-pod
      labels:
        app: myapp
        env: experiment
        type: etl
    spec:
      containers:
        - name: nginx-container
          image: nginx:1.7.1
  replicas: 3
  selector:
    matchLabels:
      type: etl
➜ k get pods --selector="app=myapp,type=etl" -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATES
myapp-deployment-59856c4487-2g9c7   1/1     Running   0          45m   172.17.0.9   minikube   <none>           <none>
myapp-deployment-59856c4487-mb28z   1/1     Running   0          45m   172.17.0.4   minikube   <none>           <none>
myapp-deployment-59856c4487-sqxqg   1/1     Running   0          45m   172.17.0.8   minikube   <none>           <none>


(⎈ |minikube:default)
Projects/experiments/kubernetes 
➜ k version     
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:14:22Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:07:13Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
(⎈ |minikube:default)

首先讓我們從文檔中清除一些概念:

  • ClusterIP:在集群內部 IP 上公開服務。 選擇此值會使服務只能從集群內部訪問

  • NodePort :在靜態端口(NodePort)的每個節點的 IP 上公開服務。 您將能夠通過請求NodeIP:NodePort從集群外部聯系 NodePort 服務。


問題 1:

我已經根據下面的配置文件創建了一個 ClusterIP 服務,但是我似乎無法從 minikube 獲取該服務的 URL。

  • 由於 Minikube 是單個主機上的虛擬化環境,我們往往會忘記集群與主機是隔離的。 如果您將服務設置為ClusterIP ,Minikube 將不會提供外部訪問。

問題2:

如果我嘗試將 NodePort 添加到service-cluster-definition.yaml端口部分,它會報錯,該鍵已被棄用。

  • 也許你粘貼在錯誤的位置。 您應該只將字段type: ClusterIP替換為type: NodePort 這是您的 yaml 的正確形式:
apiVersion: v1
kind: Service
metadata:
  name: myapp-frontend
spec:
  type: NodePort
  ports:
    - targetPort: 80
      port: 80
  selector:
    app: myapp
    type: etl

再生產:

user@minikube:~$ kubectl apply -f deployment-definition.yaml 
deployment.apps/myapp-deployment created

user@minikube:~$ kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
myapp-deployment-59856c4487-7dw6x   1/1     Running   0          5m11s
myapp-deployment-59856c4487-th7ff   1/1     Running   0          5m11s
myapp-deployment-59856c4487-zvm5f   1/1     Running   0          5m11s

user@minikube:~$ kubectl apply -f service-cluster-definition.yaml 
service/myapp-frontend created

user@minikube:~$ kubectl get service myapp-frontend
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
myapp-frontend   NodePort    10.101.156.113   <none>        80:32420/TCP   3m43s

user@minikube:~$ minikube service list
|-------------|----------------|-----------------------------|-----|
|  NAMESPACE  |      NAME      |         TARGET PORT         | URL |
|-------------|----------------|-----------------------------|-----|
| default     | kubernetes     | No node port                |     |
| default     | myapp-frontend | http://192.168.39.219:32420 |     |
| kube-system | kube-dns       | No node port                |     |
|-------------|----------------|-----------------------------|-----|

user@minikube:~$ minikube service myapp-frontend --url
http://192.168.39.219:32420

user@minikube:~$ curl http://192.168.39.219:32420
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...{{output suppressed}}...
  • 如您所見,將服務設置為NodePort ,minikube 開始使用MinikubeIP:NodePort為應用程序提供服務,將連接路由到匹配的 pod。
    • 請注意,默認情況下將在 30000:32767 之間選擇nodeport

如果您有任何問題,請在評論中告訴我。

要訪問集群內部,請執行kubectl get svc獲取集群 ip 或直接使用服務名稱。 要訪問集群外,您可以使用 NodePort 作為服務類型。

暫無
暫無

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

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