当前位置: 首页 > 知识库问答 >
问题:

在没有负载均衡器的情况下在Digital Ocean的托管库伯内特斯上公开端口80

狄飞鹏
2023-03-14

我想在端口80上公开我的Kubernetes Managed Digital Ocean(单节点)群集服务,而不使用Digital Ocean的负载平衡器。这可能吗?我该怎么做?

这本质上是一个爱好项目(我从库伯内特斯开始),只是想保持成本很低。

共有2个答案

邓令雪
2023-03-14

NodePort服务可以满足您的需要。类似这样:

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    nodePort: 80
    targetPort: 80

这会将传入流量从节点的端口80重定向到pod的端口80。在DNS中发布节点IP,即可完成设置。

一般来说,像这样将服务公开给外部世界是一个非常非常糟糕的主意,因为将所有流量传递给服务的单个节点既会收到不平衡的负载,也会成为单点故障。不过,这一考虑并不适用于单节点集群,因此需要注意的是,负载平衡器(LoadBalancer)和入口(Ingress)是实现所需功能的容错方式,NodePort最适合这种极端特定的情况。

丁翰海
2023-03-14

您可以部署配置为使用主机网络和端口80/443的入口。

>

如果您编辑自动创建的防火墙,规则最终会自行重置。解决方案是创建一个单独的防火墙,也指向相同的库伯内特斯工作节点:

$ doctl compute firewall create \
--inbound-rules="protocol:tcp,ports:80,address:0.0.0.0/0,address:::/0 protocol:tcp,ports:443,address:0.0.0.0/0,address:::/0" \
--tag-names=k8s:CLUSTER_UUID \
--name=k8s-extra-mycluster

(从仪表板或doctl kubernetes群集列表的ID列获取群集UUID值)

编辑:以上链接中的掌舵图已被弃用,因此安装该图的正确方法是(根据新文档):

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

本次回购增加后

# For Helm 2
$ helm install stable/nginx-ingress --name=myingress -f myingress.values.yml

# For Helm 3
$ helm install myingress stable/nginx-ingress -f myingress.values.yml

#EDIT: The New way to install in helm 3
helm install myingress ingress-nginx/ingress-nginx -f myingress.values.yaml

<代码>我的入口。价值观yml对于图表:

---
controller:
  kind: DaemonSet
  hostNetwork: true
  dnsPolicy: ClusterFirstWithHostNet
  daemonset:
    useHostPort: true
  service:
    type: ClusterIP
rbac:
  create: true

您应该能够通过任何工作节点IP访问: 80和: 443上的集群,它会将流量路由到您的入口。

因为节点IP可以

# For Helm 2
$ helm install --name=mydns -f mydns.values.yml stable/external-dns

# For Helm 3
$ helm install mydns stable/external-dns -f mydns.values.yml

mydns.values.yml用于图表:

---
provider: digitalocean
digitalocean:
  # create the API token at https://cloud.digitalocean.com/account/api/tokens
  # needs read + write
  apiToken: "DIGITALOCEAN_API_TOKEN"
domainFilters:
  # domains you want external-dns to be able to edit
  - example.com
rbac:
  create: true
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: testing123-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - host: testing123.example.com             # the domain you want associated
      http:
        paths:
          - path: /
            backend:
              serviceName: testing123-service  # existing service
              servicePort: 8000                # existing service port
$ dig testing123.example.com             # should return worker IP address
$ curl -v http://testing123.example.com  # should send the request through the Ingress to your backend service

(编辑:编辑自动创建的防火墙规则最终会中断,请添加单独的防火墙)。

 类似资料:
  • 我在amazon ews上有一个kubernetes集群,我打算在其上运行多个应用程序。 我有多个服务组成一个这样的应用程序,我想使用amazon负载均衡器(elb)将它们公开到Internet。我想使用ELB,因为我不想直接使用端口80,因为许多应用程序共享这个端口,我希望它们中的每一个都独立于其他应用程序定义它们的入口资源。 我读到了库伯内特斯入口资源公司的信息,认为这正是我要寻找的。然而,我

  • 在使用Google容器引擎时,人们会推荐GCP的本机负载平衡器还是Kubernetes服务type=负载平衡器选项? 人们推荐哪一种?

  • 我正在为多云开发一个新的“Kubernetes即服务”平台(如GKE等)。 问题是:K8S服务类型“LoadBalancer”与云负载平衡器(Kubernetes外部)配合使用。吉凯恩 我想在我的新“Kubernetes As a Service”平台上提供类似的功能,用户可以在该平台上选择云提供商,创建Kubernetes集群 在Kubernetes集群创建之前,我能够自动执行流程,但在“K8S

  • 我最近开始研究Kubernetes集群。在我们的集群中,对给定Kubernetes服务的网络调用流如下所示: 外部非K8S负载均衡器- 对于给定的服务,有两个副本。通过查看副本中容器的日志,我可以看到调用被路由到不同的pod。据我所知,我们还没有为Kubernetes中的服务明确设置任何负载平衡策略。 我有几个问题: 1)K8S是否有默认的负载平衡策略?我读过库贝-proxy和随机路由。它看起来绝

  • 什么是负载均衡器? 负载平衡改进了跨多个计算资源(如计算机、计算机群集、网络链路、中央处理器或磁盘驱动器)的工作负载分布 NodePort不是负载平衡器。(我知道一旦流量在集群内,kube proxy就会在pod之间进行负载平衡)我的意思是,最终用户点击http://NODEIP:30111(例如)访问应用程序的URL。即使POD之间的流量是负载平衡的,用户仍然会点击一个节点,即“节点”,它是K8

  • 背景: 我对谷歌的云平台很陌生,所以我想确保我没有遗漏任何明显的东西。 我们正在试验GKE和Kubernetes,我们希望通过https公开一些服务。我已经阅读了有关http(s)负载平衡的文档,这些文档似乎建议您应该维护自己的进行SSL终端和负载平衡的nginx实例。对我来说,这看起来相当复杂(我习惯于使用AWS及其负载平衡器(ELB),它支持SSL终止已有很长时间了)。 问题: 如果您只需要在