Невозможно получить URL-адрес службы ClusterIP из мини-куба - PullRequest
1 голос
/ 06 марта 2020

Я создал службу ClusterIP в соответствии с приведенными ниже конфигурационными файлами, однако я не могу получить URL-адрес от мини-куба для этой службы

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

И если я попытаюсь добавить NodePort в ports раздел service-cluster-definition.yaml жалуется с ошибкой, что такой ключ устарел.

Что я пропускаю или делаю неправильно?

service- cluster-definition.yaml

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

deploy-definition.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)

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Сначала давайте очистим некоторые понятия от Документации :

  • ClusterIP: Предоставляет Сервису внутренний IP-адрес кластера. Выбор этого значения делает Сервис доступным только из кластера.

  • NodePort : Предоставляет Сервису IP-адрес каждого Узла в состоянии * Порт 1076 * (NodePort). Вы сможете связаться со службой NodePort, , за пределами кластера , запросив NodeIP:NodePort.


Вопрос 1:

Я создал службу ClusterIP в соответствии с приведенными ниже файлами конфигурации, однако не могу получить URL-адрес от minikube для этой службы.

  • Поскольку Minikube - это виртуализированная среда на одном хосте, мы склонны забывать, что кластер изолирован от хост-компьютера. Если вы установите службу как ClusterIP, Minikube не будет предоставлять внешний доступ.

Вопрос 2:

И если я попытаюсь добавить NodePort в раздел ports service-cluster-definition.yaml выдает ошибку, что такой ключ устарел.

  • Может быть, вы вставляли в неправильную позицию. Вам нужно просто заменить поле type: ClusterIP на type: NodePort. Вот правильная форма вашего ямля:
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, мини-куб начинает обслуживать приложение, используя MinikubeIP:NodePort, маршрутизируя соединение с соответствующими модулями.
    • Обратите внимание, что nodeport будет выбран по умолчанию между 30000: 32767

Если у вас есть какие-либо вопросы, дайте мне знать в комментариях .

0 голосов
/ 06 марта 2020

Чтобы получить доступ внутри кластера, выполните kubectl get svc, чтобы получить IP-адрес кластера, или используйте имя службы напрямую. Для доступа к внешнему кластеру вы можете использовать NodePort в качестве типа сервиса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...