kubernates kubectl expose详解

552 阅读4分钟

        将一个资源作为新的Kubernetes服务公开。

        按名称查找部署、服务、副本集、复制控制器或pod,并使用该选择器资源作为指定端口上新服务的选择器。部署或副本集将作为仅当其选择器可转换为服务支持的选择器时,即当选择器仅包含matchLabels组件。注意,如果没有通过--port指定端口,并且公开的资源有多个端口,则将被新服务重新使用。另外,如果没有指定标签,新服务将重新使用它暴露的资源。

可能的资源包括(不区分大小写):

pod (po), service (svc), replicationcontroller (rc), deployment (deploy), replicaset (rs)

用法:

kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] 
[--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [options]

实例:

# 为复制的nginx创建一个服务,该nginx服务于端口80并连接到端口8000上的容器。
kubectl expose rc nginx --port=80 --target-port=8000

# 为“nginx”中指定的类型和名称标识的复制控制器创建服务-控制器.yaml,服务端口80,并连接到端口为8000容器。
kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000

# 为一个有效的pod创建一个服务,该pod服务于名为“frontend”的端口444
kubectl expose pod valid-pod --port=444 --name=frontend

# 基于上述服务创建第二个服务,将容器端口8443公开为名为“nginx https”的端口443
kubectl expose service nginx --port=443 --target-port=8443 --name=nginx-https

# 为端口4100上的复制流应用程序创建一个服务,平衡UDP流量并命名为“video-stream”。
kubectl expose rc streamer --port=4100 --protocol=UDP --name=video-stream

# 使用replica set为复制的nginx创建服务,replica set服务于端口80并连接到端口8000上的容器。
kubectl expose rs nginx --port=80 --target-port=8000

# 为nginx部署创建一个服务,该部署服务于端口80并连接到端口8000上的容器。
kubectl expose deployment nginx --port=80 --target-port=8000

Options:

--allow-missing-template-keys=true: 如果为true,则当模板中缺少字段或映射键时,忽略模板中的任何错误。仅适用于golang和jsonpath输出格式。

--cluster-ip='': 要分配给服务的ClusterIP。保留为空以自动分配,或设置为“无”以创建无头服务。

--dry-run='none': 必须为 "none", "server", or "client". 如果是client策略,则只打印要发送的对象,而不发送它。如果是服务器策略,则提交服务器端请求而不持久化资源。

--external-ip='': 为服务接受的附加外部IP地址(不由Kubernetes管理)。如果此IP路由到节点,则此IP除了可以访问其生成的服务IP之外,还可以访问该服务。

-f, --filename=[]: 标识要公开服务的资源的文件的文件名、目录或URL

--generator='service/v2': 要使用的API生成器的名称。有两个生成器:“service/v1”和“service/v2”。它们之间的唯一区别是v1中的服务端口名为“default”,而v2中的服务端口未命名。默认值为“service/v2”。

-k, --kustomize='': 处理kustomization目录。此标志不能与-f或-R一起使用。

-l, --labels='': 此命名创建的标签应用于此服务

--load-balancer-ip='': 要分配给负载平衡器的IP。如果为空,将创建并使用临时IP(特定于云提供商)。

--name='': 新创建的对象的名称。

-o, --output='': 输出格式。其中之一:json | yaml | name | go template | go template file | template | templatefile | jsonpath | jsonpath file。

--overrides='': 生成对象的内联JSON重写。如果该值非空,则用于覆盖生成的对象。要求对象提供有效的apiVersion字段。

--port='': 服务端口。如果未指定,则从要公开的资源复制

--protocol='': 要创建的服务的网络协议。默认值为“TCP”。

--record=false: 在资源注释中记录当前kubectl命令。如果设置为false,则不要记录命令。如果设置为true,则记录命令。如果未设置,则默认为仅当现有注释值已存在时才更新现有注释值。

-R, --recursive=false: 递归处理-f,-filename中使用的目录。当您想要管理在同一目录中组织的相关清单时,这很有用。

--save-config=false: 如果为true,则当前对象的配置将保存在其注释中。否则,注释将保持不变。如果将来要对此对象执行kubectl apply,则此标志非常有用。

--selector='': 用于此服务的标签选择器。仅支持基于相等的选择器要求。如果为空(默认值),则从复制控制器或副本集推断选择器。)

--session-affinity='': 如果非空,请将服务的会话关联设置为this;合法值:“None”、“ClientIP”

--target-port='': 服务应将通信定向到的容器上的端口的名称或编号。可选。

--template='': 当-o=go Template,-o=go Template file时要使用的模板字符串或模板文件路径。模板格式为golang模板

--type='': 此服务的类型:ClusterIP、NodePort、LoadBalancer或ExternalName。默认值为“ClusterIP”。