ClusterIP недоступен в кластере

#kubernetes #containers #devops #kubernetes-service

#kubernetes #контейнеры #devops #kubernetes-сервис

Вопрос:

Я борюсь с конфигурациями kubernates. То, что я хочу получить, это просто достичь развертывания внутри кластера. Кластер находится на моем выделенном сервере, и я развертываю его с помощью Kubeadm.

Мои узлы:

 $ kubectl get nodes
NAME          STATUS   ROLES    AGE   VERSION
k8s-master    Ready    master   9d    v1.19.3
k8s-worker1   Ready    <none>   9d    v1.19.3
  

У меня запущено развертывание (базовый пример nginx)

 $ kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           29m
  

Я создал сервис

 $ kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP   9d
my-service   ClusterIP   10.106.109.94   <none>        80/TCP    20m
  

Файл YAML для моей службы выглядит следующим образом:

 apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: nginx-deployment
  ports:
    - protocol: TCP
      port: 80
  

Теперь я должен ожидать, что если я запущу curl 10.106.109.94:80 свой k8s-master , чтобы получить http-ответ.. но то, что я получил, это:

 curl: (7) Failed to connect to 10.106.109.94 port 80: Connection refused
  

Я пробовал NodePort также и с targetPort и nodePort , но результат тот же.

Комментарии:

1. Откуда вы свернулись? Из узла или модуля в кластере?

2. От главного узла

3. Где вы запускаете свой кластер (облако, на prem, версия операционной системы)? Как вы его загрузили (kubeadm и т. Д.)? . Пожалуйста, обновите свои файлы yaml в вопросе.

4. на голом металле и с помощью kubeadm, спасибо, я обновил свой вопрос

Ответ №1:

IP-адрес кластера недоступен из-за пределов вашего кластера, что означает, что вы не получите никакого ответа от хост-компьютера, на котором размещен ваш кластер k8s, поскольку этот IP-адрес не является частью вашего компьютера или любого другого компьютера, а не является кластерным IP-адресом, который используется вашей кластерной сетью CNI, такой как flunnel,переплетение. Поэтому, чтобы получить доступ к вашим службам извне или, по крайней мере, с хост-компьютера, вам необходимо изменить тип вашего сервиса, например, NodePort, LoadBalancer, K8s port-forward.

Если вы можете изменить тип сервиса NodePort, вы получите ответ с любым IP-адресом вашего хост-компьютера и выделенным nodeport. Например, если ваш k8s-master равен 192.168.x.x, а порт узла равен 33303, вы можете получить ответ с помощью

 curl http://192.168.x.x:33303
or
curl http://worker_node_ip:33303
  

если ваш кластер установлен локально, вы можете установить MetalLB, чтобы получить привилегию балансировщика нагрузки.

Вы также можете использовать переадресацию портов, чтобы получить доступ к вашей службе с хоста, на котором есть клиент kubectl с доступом к кластеру k8s.

 kubectl port-forward svc/my-service 80:80

kubectl -n namespace port-forward svc/service_name Port:Port

  

Комментарии:

1. Я попытался переключиться на порт узла, и с главного я не могу свернуть модуль на рабочем узле… Я просто могу использовать модуль на главном узле (с портом 80, а не как порт узла (31303))