Google cloud platform GCP我可以在没有LoadBalancer的情况下公开Kubernetes群集ExternalIP吗?
我想在GCP上维护一个非常低成本的Kubernetes集群。我使用的是e1小实例的单节点池。此实例的每月成本为4.91美元,这是可以接受的。但问题是我使用的入口将我的节点端口暴露给外部IP。ingress实例使用Google负载均衡器,价格约为18美元。因此,我主要是支付给一个无用的负载平衡器,我真的不需要。有没有一种方法可以在没有负载平衡器的情况下公开这些实例的IP地址?如果在外部公开nodePort,则将公开端口号10k+。因此,对于一个网站来说,不是端口80或443。您需要代理连接,例如使用loadbalancerGoogle cloud platform GCP我可以在没有LoadBalancer的情况下公开Kubernetes群集ExternalIP吗?,google-cloud-platform,google-kubernetes-engine,google-cloud-networking,Google Cloud Platform,Google Kubernetes Engine,Google Cloud Networking,我想在GCP上维护一个非常低成本的Kubernetes集群。我使用的是e1小实例的单节点池。此实例的每月成本为4.91美元,这是可以接受的。但问题是我使用的入口将我的节点端口暴露给外部IP。ingress实例使用Google负载均衡器,价格约为18美元。因此,我主要是支付给一个无用的负载平衡器,我真的不需要。有没有一种方法可以在没有负载平衡器的情况下公开这些实例的IP地址?如果在外部公开nodePort,则将公开端口号10k+。因此,对于一个网站来说,不是端口80或443。您需要代理连接,例如使
一个解决方案是使用云运行作为反向代理,例如NGINX。在这种情况下,您还可以使用无服务器VPC连接器,并通过VPC中的专用IP访问服务。如果您从外部公开节点端口,则将公开端口号10k+。因此,对于一个网站来说,不是端口80或443。您需要代理连接,例如使用loadbalancer
一个解决方案是使用云运行作为反向代理,例如NGINX。在这种情况下,您也可以使用无服务器VPC连接器,通过VPC中的专用IP访问该服务。您好,我知道您正在探索将k8s服务公开给外部IP的不同方法。基本上有5种服务类型。ClusterIP(默认)、NodePort、LoadBalancer、ExternalName、Headless您可以从以下选项中选择最可行的选项,具体取决于您运行的服务类型。以下文档将为您提供详细的信息。
,您好,我知道您正在探索向外部ip公开k8s服务的不同方法。基本上有5种类型的服务。ClusterIP(默认)、NodePort、LoadBalancer、ExternalName、Headless您可以从以下选项中选择最可行的选项,具体取决于您运行的服务类型。以下文档将为您提供详细的信息。 ,添加入口nginx存储库 使用Helm部署NGINX入口控制器 那是你的负载平衡器 现在给自己找一个证书管理器 标记命名空间以禁用资源验证 添加Jetstack Helm存储库 安装cert manager掌舵图 接下来,您需要添加CA群集颁发者
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群集颁发者
您还需要一个入口和服务yaml
进入
服务
部署这些资源不应该花费更多
如果您非常担心成本,您可以使用minikube或micro-k8s在本地部署一个功能齐全、可公开访问的群集。添加ingress nginx存储库
使用Helm部署NGINX入口控制器
那是你的负载平衡器
现在给自己找一个证书管理器
标记命名空间以禁用资源验证
添加Jetstack Helm存储库
安装cert manager掌舵图
接下来,您需要添加CA群集颁发者
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群集颁发者
您还需要一个入口和服务yaml
进入
服务
部署这些资源不应该花费更多
如果您非常担心成本,您可以使用minikube或micro-k8s在本地部署一个功能齐全且可公开访问的群集。您可以使用nodeport公开您的服务,并直接重新连接它。但是,如果您需要使用入口控制器,则必须使用负载平衡器,或者在集群中管理自己的入口控制器(例如基于NGINX)@guillaumeblaquiere,但我想将端口80专门公开给外部IP。我有一个域名,我正在为该域名分配端口80。有没有办法将External_IP:32322绑定到我的domain.com端口80?您可以在部署、服务和入口yaml文件中定义端口。您可以使用nodeport公开您的服务并直接重新连接。但是,如果您需要使用入口控制器,则必须使用负载平衡器,或者在集群中管理自己的入口控制器(例如基于NGINX)@guillaumeblaquiere,但我想将端口80专门公开给外部IP。我有一个域名,我正在为该域名分配端口80。有没有办法将External_IP:32322绑定到我的domain.com端口80?您可以在部署、服务和入口yaml文件中定义端口。
kubectl label -n $NAMESPACE cert-manager.io/disable-validation=true
helm repo add jetstack https://charts.jetstack.io
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
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
kubectl apply -f cluster-issuer.yaml
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