公开 Digital Ocean 的托管 Kubernetes 集群
Expose Digital Ocean's Managed Kubernetes Cluster
我一直在玩 Digital Ocean 的新托管 Kubernetes 服务。我使用 Digital Ocean 的仪表板创建了一个新集群,并且似乎成功部署了我的 yaml 文件(已附)。
运行宁在上下文 kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
api-svc NodePort XX.XXX.XXX.XXX <none> 8080:30000/TCP 2h
kubernetes ClusterIP XX.XXX.X.X <none> 443/TCP 2h
我的问题是,如何在没有负载平衡器的情况下公开我的服务?
我已经能够使用 minikube 在本地执行此操作。要获取集群 IP,我 运行 minikube ip
并使用我的 nodePort 配置中指定的端口号 30000
来访问 api-svc
服务。
据我了解,Digital Ocean 的托管服务将主节点抽象出来。那么我在哪里可以找到 public IP 地址来访问我的集群?
提前致谢!
我的yaml文件供参考
apiVersion: v1
kind: Secret
metadata:
name: regcred
data:
.dockerconfigjson: <my base 64 key>
type: kubernetes.io/dockerconfigjson
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: api-deployment
labels:
app: api-deployment
spec:
replicas: 1
strategy: {}
template:
metadata:
labels:
app: api
spec:
containers:
- name: api
image: <my-dockerhub-user>/api:latest
ports:
- containerPort: 8080
imagePullSecrets:
- name: regcred
---
apiVersion: v1
kind: Service
metadata:
name: api-svc
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30000
protocol: TCP
selector:
app: api
type: NodePort
您可以命中任何工作节点的 ip。示例 http://worker-node-ip:30000/。您可以从 digitalocean 仪表板或使用 doctl cli 获取工作节点 ip。
稍微更详细的回答:DigitalOcean 会自动管理您的 NodePort 服务的防火墙规则,因此一旦您公开该服务,NodePort 就会自动向来自集群中所有工作节点的 public 流量开放。参见 docs
要查找任何工作节点的 public IP,请执行以下 doctl
命令:
# Get the first worker node from the first node-pool of your cluster
NODE_NAME=$(doctl kubernetes cluster node-pool get <cluster-name> <pool-name> -o json | jq -r '.[0].nodes[0].name')
WORKER_NODE_IP=$(doctl compute droplet get $NODE_NAME --template '{{.PublicIPv4}}')
使用“类型:NodePort”假定使用节点外部地址(任何节点)并且可能不可持续,因为节点可能是 changed/upgraded。
我一直在玩 Digital Ocean 的新托管 Kubernetes 服务。我使用 Digital Ocean 的仪表板创建了一个新集群,并且似乎成功部署了我的 yaml 文件(已附)。
运行宁在上下文 kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
api-svc NodePort XX.XXX.XXX.XXX <none> 8080:30000/TCP 2h
kubernetes ClusterIP XX.XXX.X.X <none> 443/TCP 2h
我的问题是,如何在没有负载平衡器的情况下公开我的服务?
我已经能够使用 minikube 在本地执行此操作。要获取集群 IP,我 运行 minikube ip
并使用我的 nodePort 配置中指定的端口号 30000
来访问 api-svc
服务。
据我了解,Digital Ocean 的托管服务将主节点抽象出来。那么我在哪里可以找到 public IP 地址来访问我的集群?
提前致谢!
我的yaml文件供参考
apiVersion: v1
kind: Secret
metadata:
name: regcred
data:
.dockerconfigjson: <my base 64 key>
type: kubernetes.io/dockerconfigjson
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: api-deployment
labels:
app: api-deployment
spec:
replicas: 1
strategy: {}
template:
metadata:
labels:
app: api
spec:
containers:
- name: api
image: <my-dockerhub-user>/api:latest
ports:
- containerPort: 8080
imagePullSecrets:
- name: regcred
---
apiVersion: v1
kind: Service
metadata:
name: api-svc
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30000
protocol: TCP
selector:
app: api
type: NodePort
您可以命中任何工作节点的 ip。示例 http://worker-node-ip:30000/。您可以从 digitalocean 仪表板或使用 doctl cli 获取工作节点 ip。
稍微更详细的回答:DigitalOcean 会自动管理您的 NodePort 服务的防火墙规则,因此一旦您公开该服务,NodePort 就会自动向来自集群中所有工作节点的 public 流量开放。参见 docs
要查找任何工作节点的 public IP,请执行以下 doctl
命令:
# Get the first worker node from the first node-pool of your cluster
NODE_NAME=$(doctl kubernetes cluster node-pool get <cluster-name> <pool-name> -o json | jq -r '.[0].nodes[0].name')
WORKER_NODE_IP=$(doctl compute droplet get $NODE_NAME --template '{{.PublicIPv4}}')
使用“类型:NodePort”假定使用节点外部地址(任何节点)并且可能不可持续,因为节点可能是 changed/upgraded。