В голых металлических установках невозможно использовать сервисы Ingress
и LoadBalancer
по умолчанию. Вы не можете получить EXTERNAL-IP
, как показано в предоставленных вами выходах.
Первая указанная вами команда curl
показывает, что вы используете свой сервис mobsf
как NodePort
, это означает, что вы можете достичь своего приложения, набрав IP-адрес вашего узла + порта, например http://<NODE_IP>:8080
, но без аутентификации, поскольку вы не получаете доступ к серверу через вход.
Вот все типы служб и как это работает:
ClusterIP
: Предоставляет Службу по внутреннему IP-адресу кластера. Выбор этого значения делает Сервис доступным только из кластера. Это значение по умолчанию ServiceType
. NodePort
: Предоставляет Сервис для IP-адреса каждого узла через порт c (NodePort
). Служба ClusterIP
, к которой автоматически создается маршрут службы NodePort
. Вы сможете связаться со службой NodePort
из-за пределов кластера, запросив <NodeIP>:<NodePort>
. LoadBalancer
: извещение службы извне с использованием балансировщика нагрузки облачного провайдера , NodePort
и ClusterIP
Службы, для которых автоматически создаются внешние маршруты балансировщика нагрузки.
Как использовать LoadBalancer и Ingress в установках с «голым железом»?
В Nginx документах показано, как настроить MetalLB , чтобы разрешить вашему сервису «Чистый металл» использовать службы LoadBalancer.
MetalLB предоставляет реализацию балансировщика сетевой нагрузки для кластеров Kubernetes, которые не работают на поддерживаемом облачном провайдере, что позволяет эффективно использовать службы LoadBalancer в любом кластере.
В принципе, настройка проста:
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.3/manifests/metallb.yaml
А затем создайте ConfigMap для настройки: - отредактируйте диапазон ip в соответствии с вашей сетью
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.1.240-192.168.1.250 <= EDIT IP RANGE
Проверьте установку, набрав kubectl get pods -n metallb-system
, это ожидаемый вывод :
$ kubectl get pods -n metallb-system
NAME READY STATUS RESTARTS AGE
controller-65895b47d4-6wzfr 1/1 Running 0 9d
speaker-v52xj 1/1 Running 0 9d
После того, как MetalLB установлен и настроен, вы сможете использовать сервисы Ingress и Loadbalancer.
Вот пример того, как настроить службу (ClusterIP) и вход:
apiVersion: v1
kind: Service
metadata:
name: mobsf
spec:
selector:
app: mobsf
ports:
- protocol: TCP
port: 8000
targetPort: 8000
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mobsf-ing
namespace: default
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - foo'
spec:
rules:
- host: worker1.mydomain.local
http:
paths:
- path: "/"
backend:
serviceName: mobsf
servicePort: 8000
- path: "/api/v1"
backend:
serviceName: mobsf
servicePort: 8080
Проверьте вход с помощью команды kubectl get ing
и найдите в столбце EXTERNAL-IP
.
После этого убедитесь, что вы настроили в своем локальный DNS запись для worker1.mydomain.local
, указывающая на ip выше.
Пожалуйста, дайте мне знать, если это помогло