Я хотел бы поддерживать очень недорогой кластер Kubernetes на GCP. Я использую единый пул узлов e1-small. Ежемесячная стоимость этого экземпляра составляет 4,91 доллара, и это нормально. Но проблема в том, что я использую для доступа к портам моего узла внешний IP-адрес. Во входящем экземпляре используется балансировщик нагрузки Google, который стоит около 18 долларов. Поэтому я в основном плачу за бесполезный балансировщик нагрузки, который мне действительно не нужен. Есть ли способ раскрыть IP-адреса этих экземпляров без балансировщика нагрузки?
GCP Могу ли я открыть внешний IP-адрес кластера Kubernetes без LoadBalancer?
Ответы (3)
Если вы открываете nodePort извне, вы откроете номер порта 10k +. Так что не порт 80 или 443 для веб-сайта. Вам необходимо проксировать соединение, например, с помощью балансировщика нагрузки.
Решение - использовать Cloud Run в качестве обратного прокси, например, с NGINX. В этом случае вы также можете использовать бессерверный соединитель VPC и подключиться к службе через частный IP-адрес в вашем VPC.
Привет, я понимаю, что вы изучаете различные способы предоставить вам услугу k8s для внешнего ip. По сути, существует 5 типов услуг. ClusterIP (по умолчанию), NodePort, LoadBalancer, ExternalName, Headless, вы можете выбрать один из следующих вариантов, который может быть наиболее подходящим в зависимости от типа используемой вами службы. Следующие документы помогут вам, предоставив подробные сведения об этом. https://cloud.google.com/kubernetes-engine/docs/concepts/service#types_of_services, https://cloud.google.com/kubernetes-engine/docs/how-to/exposing-apps,
Добавьте репозиторий ingress-nginx
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
Используйте Helm для развертывания контроллера входящего трафика NGINX
helm install $NGINX ingress-nginx/ingress-nginx \
--namespace $NAMESPACE \
--set controller.replicaCount=2 \
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.admissionWebhooks.patch.nodeSelector."beta\.kubernetes\.io/os"=linux
Это ваш балансировщик нагрузки.
А теперь заведите себе диспетчер сертификатов ...
Отметьте пространство имен, чтобы отключить проверку ресурсов
kubectl label -n $NAMESPACE cert-manager.io/disable-validation=true
Добавить репозиторий Jetstack Helm
helm repo add jetstack https://charts.jetstack.io
Установите Helm-диаграмму cert-manager
helm install cert-manager jetstack/cert-manager \
--namespace $NAMESPACE \
--set installCRDs=true \
--set nodeSelector."kubernetes\.io/os"=linux \
--set webhook.nodeSelector."kubernetes\.io/os"=linux \
--set cainjector.nodeSelector."kubernetes\.io/os"=linux
Затем вам нужно добавить CA Cluster Issuer ...
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: $EMAIL_ADDRESS
privateKeySecretRef:
name: letsencrypt
solvers:
- http01:
ingress:
class: nginx
podTemplate:
spec:
nodeSelector:
"kubernetes.io/os": linux
Применить CA Cluster Issuer
kubectl apply -f cluster-issuer.yaml
Вам также понадобится входной и служебный yaml.
Ingress
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: $INGRESS_NAME
namespace: $NAMESPACE
labels:
app.kubernetes.io/part-of: $NAMESPACE
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/use-regex: "true"
cert-manager.io/cluster-issuer: letsencrypt
spec:
tls:
- hosts:
- $YOUR_DOMAIN
secretName: tls-secret
rules:
- host: $YOUR_DOMAIN
http:
paths:
- backend:
serviceName: $SERVICE_NAME
servicePort: $SERVICE_PORT
Услуга
apiVersion: v1
kind: Service
metadata:
name: $SERVICE_NAME
namespace: $NAMESPACE
labels:
app.kubernetes.io/part-of: $NAMESPACE
app.kubernetes.io/type: service
spec:
type: ClusterIP
ports:
- name: fart
port: $SERVICE_PORT
targetPort: $SERVICE_PORT
selector:
app.kubernetes.io/name: $DEPLOYMENT_NAME
app.kubernetes.io/part-of: $NAMESPACE
Развертывание этих ресурсов не должно стоить больше.
Если вас так беспокоят затраты, вы можете развернуть полностью функционирующий и общедоступный кластер локально с помощью minikube или micro-k8s.