#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))