yaml创建

实践中发现,必须得有selector,且与deployment的标签一致,如都是"app: nginx",否则不能用创建出来的service来访问nginx

apiVersion: v1
kind: Service
metadata:
  name: nginx-service	#Service 的名称
  labels:     	#Service 自己的标签
    app: nginx	#为该 Service 设置 key 为 app,value 为 nginx 的标签
spec:	    #这是关于该 Service 的定义,描述了 Service 如何选择 Pod,如何被访问
  selector:	    #标签选择器
    app: nginx	#选择包含标签 app:nginx 的 Pod
  ports:
  - name: nginx-port	#端口的名字
    protocol: TCP	    #协议类型 TCP/UDP
    port: 80	        #集群内的其他容器组可通过 80 端口访问 Service
    nodePort: 32600   #通过任意节点的 32600 端口访问 Service
    targetPort: 80	#将请求转发到匹配 Pod 的 80 端口
  type: NodePort	#Serive的类型,ClusterIP/NodePort/LoaderBalancer

k8s api创建
@Data
public class ServiceDTO {
    /**
     * apiVersion: v1
     * kind: Service
     * metadata:
     *   name: nginx-service	#Service 的名称
     *   labels:     	#Service 自己的标签
     *     app: nginx	#为该 Service 设置 key 为 app,value 为 nginx 的标签
     * spec:	    #这是关于该 Service 的定义,描述了 Service 如何选择 Pod,如何被访问
     *   selector:	    #标签选择器
     *     app: nginx	#选择包含标签 app:nginx 的 Pod
     *   ports:
     *   - name: nginx-port	#端口的名字
     *     protocol: TCP	    #协议类型 TCP/UDP
     *     port: 80	        #集群内的其他容器组可通过 80 端口访问 Service
     *     nodePort: 32600   #通过任意节点的 32600 端口访问 Service
     *     targetPort: 80	#将请求转发到匹配 Pod 的 80 端口
     *   type: NodePort	#Serive的类型,ClusterIP/NodePort/LoaderBalancer
     */
    private String metadataName;
    private String metadataLabelsApp;
    private String specSelectorApp;
    private String specPortsName;
    private String specPortsProtocol;
    private Integer specPortsPort;
    private Integer specPortsNodePort;
    private IntOrString specPortsTargetPort;
    private String specType;

}

    /**
     * 创建一个service
     * @param namespace
     * @param serviceDTO
     * @return
     */
    @PostMapping("/createNamespacedService/{namespace}")
    public ResultUtil createNamespacedService(@PathVariable String namespace,
                                              @RequestBody ServiceDTO serviceDTO) {
        Gson gson = new Gson();
        CoreV1Api apiInstance = new CoreV1Api(k8sInit.getConnection());
        V1Service result;
        V1Service body = serviceService.createV1Service(serviceDTO);
        try {
            result = apiInstance.createNamespacedService(namespace, body, "true", null, null);
            System.out.println(result);
        } catch (ApiException e) {
            return ResultUtil.error(String.valueOf(e.getCode()), e.getMessage());
        }
        return ResultUtil.success(gson.toJson(result));
    }

postman

POST http://localhost:8080/api/v1/service/createNamespacedService/default

{
	"metadataName":"nginx-service1",
	"metadataLabelsApp":"nginx",
    "specSelectorApp":"nginx",
    "specPortsName":"nginx-port",
    "specPortsProtocol":"TCP",
    "specPortsPort": 80,
    "specPortsNodePort": 32601,
    "specPortsTargetPort": 80,
    "specType": "NodePort"
}

kuboard上查看
在这里插入图片描述
创建的是一个nginx的service,
访问入口http://192.168.2.3:32601/
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐