1、expose简介
kubectl expose:取一个复制控制器、服务或pod,并将其expose为一个新的Kubernetes服务。
按名称查找复制控制器、服务、复制集或pod,并使用该资源的选择器作为指定端口上新服务的选择器。只有当副本集的选择器转换为服务支持的选择器时,即当副本集选择器只包含matchLabels组件时,副本集才会被公开为服务。如果没有通过-port指定端口,并且公开的资源有多个端口,那么所有端口都将被新服务重用。另外,如果没有指定标签,新服务将重用其公开的资源中的标签。
2、Kubectl语法
kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]
3、kubectl expose命令
1)为复制的nginx创建一个服务,该服务位于端口80上,并连接到端口8000上的容器
kubectl expose rc nginx --port=80 --target-port=8000
2)根据nginx-controller.yaml中指定的类型和名称为复制控制器创建一个服务,服务于80端口,并连接到8000端口的containers
kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000
3)为pod valid-pod创建一个服务,它服务于端口444,名称为frontend
kubectl expose pod valid-pod --port=444 --name=frontend
4)基于上面的服务创建第二个服务,将容器端口8443公开为端口443,名称为nginx-https
kubectl expose service nginx --port=443 --target-port=8443 --name=nginx-https
5)在4100端口上为复制的流媒体应用程序创建一个名为 “video-stream” 的服务,以均衡UDP流量
kubectl expose rc streamer --port=4100 --protocol=udp --name=video-stream
6)使用复制集为复制的nginx创建一个服务,该服务位于端口80上,连接到端口8000上的容器
kubectl expose rs nginx --port=80 --target-port=8000
4、kubectl expose选项
1)选项
选项 | 说明 |
--container-port="" | --target-port的同义词 |
--dry-run[=false] | 如果为true,则只打印将要发送的对象,而不创建它。 |
--external-ip="" | 为服务接受的附加外部 IP 地址(不由 Kubernetes 管理)。 如果这个 IP 被路由到一个节点,除了它生成的服务 IP 之外, 这个 IP 可以访问该服务。 |
-f, --filename=[] | 标识要公开服务的资源的文件的文件名、目录或URL |
--generator="service/v2" | 要使用的API生成器的名称。有两个生成器: 'service/v1' 和 'service/v2'。 它们之间的唯一区别是,v1中的服务端口被命名为 'default', 而v2中的服务端口没有命名。 默认设置是 'service/v2'。 |
-l, --labels="" | 应用于此调用创建的服务的标签。 |
--load-balancer-ip="" | 要分配给负载均衡器的IP。如果为空, 将创建和使用一个临时IP(特定于云提供商)。 |
--name="" | 新创建对象的名称。 |
--no-headers[=false] | 在使用默认输出时,不要打印标题。 |
-o, --output="" | 输出格式。 以下之一: json|yaml|wide|name|go-template=... |go-template-file=...|jsonpath=...|jsonpath-file=... 参考 golang template [template/#pkg-overview] 和 jsonpath template [jsonpath.md] |
--output-version="" | 输出带有给定组版本的格式化对象 (例如: 'extensions/v1beta1')。 |
--overrides="" | 生成对象的内联JSON覆盖。如果该参数非空, 则用于覆盖生成的对象。要求对象提供有效的apiVersion字段。 |
--port="" | 服务应该在其上服务的端口。如果未指定,则从公开的资源复制 |
--protocol="TCP" | 要创建的服务的网络协议。 默认是 'tcp'。 |
--record[=false] | 在资源注释中记录当前kubectl命令。 |
--save-config[=false] | 如果为true,则当前对象的配置将保存在其注释中。 当希望将来在此对象上执行kubectl apply时,这非常有用。 |
--selector="" | 用于此服务的标签选择器。只支持基于相等的选择器要求。 如果为空(默认值),则从复制控制器或复制集推断选择器。 |
--session-affinity="" | 如果非空,则将服务的session affinity设置为此; legal values: 'None', 'ClientIP' |
-a, --show-all[=false] | 打印时,显示所有资源(默认隐藏终止的pod)。 |
--show-labels[=false] | 打印时,将所有标签显示为最后一列(默认隐藏标签列) |
--sort-by="" | 如果非空,则使用此字段规范对列表类型进行排序。 字段规范表示为JSONPath表达式(例如 '{.metadata.name}')。 这个JSONPath表达式指定的API资源中的字段必须是整数或字符串。 |
--target-port="" | 服务应该将流量导向的容器上的端口的名称或编号。可选的。 |
--template="" | 当-o=go-template, -o=go-template-file时要使用的模板文件的模板字符串或路径。 模板格式为golang templates [template/#pkg-overview]。 |
--type="" | 此服务的类型:ClusterIP、NodePort或LoadBalancer。 默认设置是'ClusterIP'。 |
2)从父命令继承的选项
选项 | 说明 |
--alsologtostderr[=false] | 记录到标准错误和文件。 |
--certificate-authority="" | 证书颁发机构的证书文件的路径。 |
--client-certificate="" | 用于TLS的客户端证书文件的路径。 |
--client-key="" | 用于TLS的客户端密钥文件的路径。 |
--cluster="" | 要使用的kubeconfig集群的名称 |
--context="" | 要使用的kubeconfig上下文的名称 |
--insecure-skip-tls-verify[=false] | 如果为true,则不会检查服务器证书的有效性。 这将使HTTPS连接不安全。 |
--kubeconfig="" | 用于CLI请求的kubeconfig文件的路径。 |
--log-backtrace-at=:0 | 当日志记录达到line file:N时,发出堆栈跟踪 |
--log-dir="" | 如果非空,则将日志文件写入此目录 |
--log-flush-frequency=5s | 两次日志刷新之间的最大秒数 |
--logtostderr[=true] | 日志到标准错误而不是文件 |
--match-server-version[=false] | 要求服务器版本与客户端版本匹配 |
--namespace="" | 如果存在,则此CLI请求的名称空间作用域。 |
--password="" | API服务器基本身份验证密码。 |
-s, --server="" | Kubernetes API服务器的地址和端口 |
--stderrthreshold=2 | 达到或超过这个阈值的日志将发送到stderr |
--token="" | API服务器身份验证的Bearer token。 |
--user="" | 要使用的kubeconfig用户的名称 |
--username="" | API服务器基本认证的用户名。 |
--v=0 | 日志级别为V日志 |
--vmodule= | 用逗号分隔的pattern=N个 用于文件过滤日志记录的设置列表 |