在Digital Ocean'上显示端口80;s管理的Kubernetes没有负载平衡器
我想公开Kubernetes Managed Digital Ocean(单节点)群集在端口80上的服务,而不使用Digital Ocean的负载平衡器。这可能吗?我该怎么做 这本质上是一个爱好项目(我从Kubernetes开始),只是想保持成本非常低 A可以做你想做的事。大概是这样的:在Digital Ocean'上显示端口80;s管理的Kubernetes没有负载平衡器,kubernetes,digital-ocean,Kubernetes,Digital Ocean,我想公开Kubernetes Managed Digital Ocean(单节点)群集在端口80上的服务,而不使用Digital Ocean的负载平衡器。这可能吗?我该怎么做 这本质上是一个爱好项目(我从Kubernetes开始),只是想保持成本非常低 A可以做你想做的事。大概是这样的: kind: Service apiVersion: v1 metadata: name: my-service spec: type: NodePort selector: app: MyA
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最适合这种极端特殊的情况。您可以部署配置为使用主机网络和端口80/443的Ingress
CLUSTER\u UUID
值,或从doctl kubernetes集群列表获取ID列
)
# 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
myingres.values.yml
对于图表:
---
控制器:
种类:守护进程
主机网络:对
DNS策略:ClusterFirstWithHostNet
守护程序:
useHostPort:正确
服务:
类型:集群
rbac:
创建:true
mydns.values.yml
用于图表:
---
提供者:数码海洋
数码海洋:
#在以下位置创建API令牌:https://cloud.digitalocean.com/account/api/tokens
#需要读+写
apiToken:“数字海洋API\U令牌”
域筛选器:
#您希望外部dns能够编辑的域
-example.com
rbac:
创建:true
---
apiVersion:extensions/v1beta1
种类:入口
元数据:
名称:testing123入口
注释:
kubernetes.io/ingres.class:nginx
规格:
规则:
-主机:testing123.example.com#您想要关联的域
http:
路径:
-路径:/
后端:
服务名称:testing123服务#现有服务
服务端口:8000#现有服务端口
(编辑:编辑自动创建的防火墙规则最终会被打破,改为添加一个单独的防火墙)。如果你对成本很敏感,那么为什么不能使用minikube,因为该应用程序仍然需要公开访问,比如个人网站或公文包的web应用程序。你包含的链接说minikube只允许你在“个人电脑上的虚拟机”中运行东西,这不足以实现这样的目标。谢谢你的回复和示例!我读到nodePort仅限于非标准端口(30000-32767)。在这种情况下是真的吗?你是对的,我没有正确地阅读文档。我建议的解决方案不起作用。以下是将端口
80
上的ingress controller服务
公开给外部用户而不使用LoadBalancer
的唯一方法吗?当我使用NodePort
时,我必须使用Nginx
或Apache
将80与NodePort(30000~32767)绑定。非常感谢!花了3天多的时间才找到这个好答案。helm安装myingres stable/nginx-ingres-f myingres.values.yml
for helm3@ZitRo当K8s节点被自动替换时会发生什么情况?(例如:扩展/升级/故障等)。或者你是指自己在“裸”虚拟机上运行k8s吗?@rcoup我关于将浮动IP与DO k8s一起使用的建议(截至2020年12月1日)被证明是错误的。DO support的答案是:当节点被您/DO回收或集群升级时,浮动IP将不起作用。节点和替换它的节点之间没有关系,因此您分配的浮动IP只是认为它被分配到的节点已被删除,然后被分离。节点与替换节点之间缺乏这种关系是我们不建议在DOKS节点上使用浮动IP的原因,因为它们只是暂时“工作”。是否可以提供这些指令而不使用其他依赖项(如Helm)?
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
# 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
$ 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