在裸机集群上公开 Kubernetes pod
Expose a Kubernetes pod on a bare metal cluster
我试图在没有域的单节点裸机集群上公开 Kubernetes pod。
据我了解,我有以下选项:
- 使用 NodePort 公开
- 使用 Ingress 控制器公开
- 使用 ClusterIP 公开并手动设置外部 IP
正如我已经提到的,我只有一个节点集群。这意味着 master 在 fedora 主机系统上直接同时是 master 和 node 运行。
最简单的解决方案是使用 NodePort。但这里的限制是(如果我是对的)服务端口将自动从给定的端口范围中选择。
下一个更好的解决方案是使用入口控制器。但是为此,我需要一个 public 域,但我没有。所以ingress controller也不适合我
我还有其他选择吗?我只想直接在9090端口暴露我的服务。
为什么不用选项3呢?你可以给你的节点ip设置externalIPs。
apiVersion: v1
kind: Service
...
spec:
externalIPs:
- your node ip
还有NodePort,可以指定服务端口。
您可以通过将此选项添加到您的 apiserver 设置 (/etc/kubernetes/manifests/kube-apiserver.yaml
) 来为 NodePort 设置自定义端口范围:
--service-node-port-range portRange
Default: 30000-32767
A port range to reserve for services with NodePort visibility. Example:
'30000-32767'.
Inclusive at both ends of the range.
这是 Kubernetes documentation 中与服务相关的部分:
If you want a specific port number, you can specify a value in the
nodePort
field, and the system will allocate you that port or else the
API transaction will fail (i.e. you need to take care about possible
port collisions yourself). The value you specify must be in the
configured range for node ports.
此答案的示例取自文章 Hosting Your Own Kubernetes NodePort Load Balancer:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
name: nginx
spec:
type: NodePort
ports:
- port: 80
nodePort: 30080
name: http
- port: 443
nodePort: 30443
name: https
selector:
name: nginx
我试图在没有域的单节点裸机集群上公开 Kubernetes pod。 据我了解,我有以下选项:
- 使用 NodePort 公开
- 使用 Ingress 控制器公开
- 使用 ClusterIP 公开并手动设置外部 IP
正如我已经提到的,我只有一个节点集群。这意味着 master 在 fedora 主机系统上直接同时是 master 和 node 运行。
最简单的解决方案是使用 NodePort。但这里的限制是(如果我是对的)服务端口将自动从给定的端口范围中选择。
下一个更好的解决方案是使用入口控制器。但是为此,我需要一个 public 域,但我没有。所以ingress controller也不适合我
我还有其他选择吗?我只想直接在9090端口暴露我的服务。
为什么不用选项3呢?你可以给你的节点ip设置externalIPs。
apiVersion: v1
kind: Service
...
spec:
externalIPs:
- your node ip
还有NodePort,可以指定服务端口。
您可以通过将此选项添加到您的 apiserver 设置 (/etc/kubernetes/manifests/kube-apiserver.yaml
) 来为 NodePort 设置自定义端口范围:
--service-node-port-range portRange
Default: 30000-32767
A port range to reserve for services with NodePort visibility. Example: '30000-32767'.
Inclusive at both ends of the range.
这是 Kubernetes documentation 中与服务相关的部分:
If you want a specific port number, you can specify a value in the
nodePort
field, and the system will allocate you that port or else the API transaction will fail (i.e. you need to take care about possible port collisions yourself). The value you specify must be in the configured range for node ports.
此答案的示例取自文章 Hosting Your Own Kubernetes NodePort Load Balancer:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
name: nginx
spec:
type: NodePort
ports:
- port: 80
nodePort: 30080
name: http
- port: 443
nodePort: 30443
name: https
selector:
name: nginx