Kubernetes服务是一种为一组功能相同的pod提供单一不变的接入点的资源。当服务存在时,它的IP地址和端口不会改变。客户端通过IP地址和端口号建立连接,这些连接会被路由到提供该服务的任意一个pod上。通过这种方式,客户端不需要知道每个单独的提供服务的pod的地址,这样这些pod就可以在集群中随时被创建或移除。

二、为一个pod创建service

1、创建一个pod

apiVersion: v1

kind: Pod

metadata:

name: nginx

labels:

app: web #标签选择器app:web

namespace: test

spec:

containers:

- name: nginx-test

image: test-harbor.cedarhd.com/public/nginx:curl

ports:

- containerPort: 80 #容器端口

2、为该pod创建对应的service

apiVersion: v1

kind: Service

metadata:

name: nginx

namespace: test

spec:

ports:

- port: 80 #该service服务的可用对外端口

targetPort: 80 #服务将连接转发到容器的端口

selector:

app: web #具有app=web标签的pod都属于该服务

[[email protected] k8s-yaml-file]# kubectl get svc -n test

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

nginx ClusterIP 192.168.81.180 80/TCP 8m8s

[[email protected] k8s-yaml-file]# kubectl get pod -o wide -n test

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

nginx 1/1 Running 0 27m 172.7.21.6 test-nodes1.cedarhd.com

[[email protected] k8s-yaml-file]# ipvsadm -ln | grep -C 3 192.168.81.180

TCP 192.168.66.183:80 nq

-> 172.7.21.3:8082 Masq 1 0 0

-> 172.7.22.4:8082 Masq 1 0 0

TCP 192.168.81.180:80 nq #对应

-> 172.7.21.6:80 Masq 1 0 0

TCP 192.168.96.231:80 nq

-> 172.7.21.6:80 Masq 1 0 0

三、同一个服务暴露多个端口

apiVersion: v1

kind: Service

metadata:

name: nginx

namespace: test

spec:

ports:

- name: http

port: 80

targetPort: 80

- name: https

port: 443

targetPort: 443

selector:

app: web

备注:在创建一个有多个端口的服务的时候,必须给每个端口指定名字。

原文:https://blog.51cto.com/12965094/2485849

Logo

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

更多推荐