Google cloud platform GCP我可以在没有LoadBalancer的情况下公开Kubernetes群集ExternalIP吗?

Google 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。您需要代理连接,例如使

我想在GCP上维护一个非常低成本的Kubernetes集群。我使用的是e1小实例的单节点池。此实例的每月成本为4.91美元,这是可以接受的。但问题是我使用的入口将我的节点端口暴露给外部IP。ingress实例使用Google负载均衡器,价格约为18美元。因此,我主要是支付给一个无用的负载平衡器,我真的不需要。有没有一种方法可以在没有负载平衡器的情况下公开这些实例的IP地址?

如果在外部公开nodePort,则将公开端口号10k+。因此,对于一个网站来说,不是端口80或443。您需要代理连接,例如使用loadbalancer


一个解决方案是使用云运行作为反向代理,例如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