Это старая версия документа!
Minikube
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 $ minikube start $ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" $ curl -LO https://dl.k8s.io/release/v1.31.0/bin/linux/amd64/kubectl $ echo "7c27adc64a84d1c0cc3dcf7bf4b6e916cc00f3f576a2dbac51b318d926032437" > kubectl.sha256 $ echo "$(cat kubectl.sha256) kubectl" | sha256sum --check $ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl $ chmod +x kubectl $ mkdir -p ~/.local/bin $ mv ./kubectl ~/.local/bin/kubectl $ kubectl version --client $ source /usr/share/bash-completion/bash_completion $ echo 'source <(kubectl completion bash)' >>~/.bashrc $ echo 'alias k=kubectl' >>~/.bashrc $ echo 'complete -o default -F __start_kubectl k' >>~/.bashrc $ source ~/.bashrc $ kubectl $ k get pods $ k get pods -A $ k get svc -A $ kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
Сервисы
ClusterIP
ClusterIP — это дефолтный тип сервиса в кубах, он поднимает вам сервис внутри кластера на внутрекластеровом IP. Доступа для внешнего трафика нет, только внутри кластера.
YAML для ClusterIP выглядит как-то так:
apiVersion: v1 kind: Service metadata: name: my-internal-service spec: selector: app: my-app type: ClusterIP ports: - name: http port: 80 targetPort: 80 protocol: TCP
$ kubectl proxy --port=8080
Когда использовать ClusterIP для открытия внешнего доступа? Есть парочка вариантов применения, когда стоит пускать трафик на сервис через kubernetes proxy:
- Когда надо дебажить сервисы, подключаясь к ним напрямую
- Когда надо получить доступ к какому-либо сервису
NodePort
NodePort — наиболее простой и “тупой” способ пустить внешний трафик на сервис. Название “NodePort” говорит само за себя — просто открывается порт на ноде для доступа извне, а трафик уже маршрутизируется на сам сервис.
apiVersion: v1 kind: Service metadata: name: my-nodeport-service spec: selector: app: my-app type: NodePort ports: - name: http port: 80 targetPort: 80 nodePort: 30036 protocol: TCP
Как можно было заметить, в описании фигурирует параметр nodePort, который задаёт номер порта для открытия. Если его не задавать, то выберется рандомный порт в диапазоне 30000-32767.
Когда использовать NodePort? Для начала, у этого метода сразу несколько минусов:
- Один порт — один сервис
- Диапазон 30000-32767 (хоть и изменяемый, но делать это надо крайне осторожно)
- Если IP ноды может измениться (например, в GKE или AWS при автоскейлинге), то это тоже надо учитывать
В общем, не рекомендую использовать этот метод в продакшне. Конечно, если это какой-то демо-сервис и от него не требуется 100% доступность, вполне можно использовать NodePort.
LoadBalancer
LoadBalancer — это, можно сказать, стандартный и самый простой способ пустить внешний трафик на сервис. Правда, работает он только в облаках, т.к. использует нативные облачные решения текущего провайдера. Например, при использовании в GKE будет поднят Network Load Balancer с отдельным внешним IP-адресом, который будет маршрутизировать весь трафик на указанный сервис.