Я пытаюсь развернуть nginx на kubernetes, версия kubernetes - v1.5.2, я развернул nginx с 3 репликами, файл YAML находится ниже,
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: deployment-example
spec:
replicas: 3
revisionHistoryLimit: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.10
ports:
- containerPort: 80
и теперь я хочу открыть его порт 80 на порту 30062 узла, для этого я создал службу ниже,
kind: Service
apiVersion: v1
metadata:
name: nginx-ils-service
spec:
ports:
- name: http
port: 80
nodePort: 30062
selector:
app: nginx
type: LoadBalancer
этот сервис работает нормально, но он отображается как ожидающий не только на панели инструментов kubernetes, но и на терминале.
поэтому, пожалуйста, помогите мне решить эту проблему. Спасибо ...
источник
LoadBalancer
в качестве типа службы допустимый тип службы.NodePort
иingress
есть ли другие способы сделать это, но не решить проблему, верно?LoadBalancer
?Если вы используете Minikube, есть волшебная команда!
Надеюсь, кто-то сможет сэкономить на этом несколько минут.
Ссылка для справки https://minikube.sigs.k8s.io/docs/handbook/accessing/#using-minikube-tunnel
источник
minikube tunnel
и это действительно решаетpending
проблему, но затем новый внешний IP-адрес не работает: я получаю ошибку тайм-аута ...Если вы не используете GCE или EKS (вы использовали
kubeadm
), вы можете добавитьexternalIPs
спецификацию к YAML вашей службы. Вы можете использовать IP-адрес, связанный с основным интерфейсом вашего узла, напримерeth0
. Затем вы можете получить доступ к сервису извне, используя внешний IP-адрес узла.источник
Чтобы получить доступ к сервису
minikube
, вам необходимо выполнить следующую команду:Подробнее здесь: Minikube GitHub
источник
Я создал одноузловой кластер k8s с помощью kubeadm. Когда я попробовал PortForward и прокси kubectl , он показал внешний IP-адрес как ожидающий.
В моем случае я исправил сервис следующим образом:
После этого он начал работать по общедоступному IP.
источник
Если вы работаете на minikube , не забудьте указать пространство имен, если вы не используете default.
служба minikube << имя_службы >> --url --namespace = << имя_пространства имен >>
источник
Если вы используете minikube, запустите приведенные ниже команды с терминала,
источник
та же проблема:
Однако он доступен через http://192.168.99.100:30454 .
источник
После ответа @Javier. Я решил пойти с «исправлением внешнего IP» для моего балансировщика нагрузки.
Это заменит этот «ожидающий» новый исправленный IP-адрес, который вы можете использовать для своего кластера.
Подробнее об этом. См. Сообщение karthik о поддержке LoadBalancer с помощью Minikube для Kubernetes.
Не самый чистый способ сделать это. Мне нужно было временное решение. Надеюсь, это кому-то поможет.
источник
Используйте NodePort:
(Запишите порт)
(IP-> Получить IP-адрес, на котором работает мастер)
Ваш сервис доступен по адресу (IP) :( порт)
источник
При использовании Minikube вы можете получить IP-адрес и порт, через которые вы можете получить доступ к службе, запустив службу minikube kubia-http.
источник
Если вы не используете поддерживаемое облако (aws, azure, gcloud и т. Д.), Вы не можете использовать LoadBalancer без MetalLB https://metallb.universe.tf/, но оно еще находится в стадии бета-тестирования ..
источник
LoadBalancer ServiceType будет работать только в том случае, если базовая инфраструктура поддерживает автоматическое создание балансировщиков нагрузки и имеет соответствующую поддержку в Kubernetes, как в случае с Google Cloud Platform и AWS. Если такая функция не настроена, поле IP-адреса LoadBalancer не заполняется и все еще находится в состоянии ожидания, и Служба будет работать так же, как Служба типа NodePort.
источник
Вы можете исправить IP-адрес узла, на котором размещены поды (частный IP-адрес узла), это простой обходной путь.
Ссылаясь на приведенные выше сообщения, для меня сработало следующее:
kubectl patch service my-loadbalancer-service-name \ -n lb-service-namespace \ -p '{"spec": {"type": "LoadBalancer", "externalIPs": ["xxx.xxx.xxx.xxx Private IP физического сервера - узел - где выполняется развертывание "]}} '
источник
удалить существующую службу и создать такую же новую службу решила мои проблемы. Моя проблема в том, что Ip балансировки нагрузки, который я определяю, используется так, что внешняя конечная точка ожидает обработки. Когда я сменил новый IP-адрес для балансировки нагрузки, он все еще не работал. Наконец, удаление существующей службы и создание новой решило мою проблему.
источник
Проверьте логи kube-controller. Мне удалось решить эту проблему, установив теги clusterID для экземпляра ec2, на котором я развернул кластер.
источник
Если это ваш частный кластер k8s, MetalLB подойдет лучше. Ниже приведены шаги.
Шаг 1. Установите MetalLB в свой кластер
Шаг 2. Настройте его с помощью configmap
Шаг 3: Создайте свою службу для получения внешнего IP (хотя это будет частный IP).
FYR:
Перед установкой MetalLB:
После установки MetalLB:
источник
Добавление решения для тех, кто столкнулся с этой ошибкой при работе на амазонки-ЭКС,
Прежде всего запустите:
А затем просмотрите
events
поле в примере вывода ниже:Просмотрите сообщение об ошибке:
В моем случае причиной отсутствия подходящих подсетей для создания ELB были:
1: Кластер EKS был развернут не в той группе подсетей - внутренние подсети, а не общедоступные.
(*) По умолчанию службы типа
LoadBalancer
создают общедоступные балансировщики нагрузки, еслиservice.beta.kubernetes.io/aws-load-balancer-internal: "true"
аннотация не была предоставлена).2: подсети не были помечены в соответствии с указанными здесь требованиями .
Пометка VPC с помощью:
Пометка общедоступных подсетей с помощью:
источник