二、Service基本用法(1)通过yaml文件创建:apiVersion: v1kind: Servicemetadata: name: nginx-servicespec: type: NodePort selector: name: nginx-pod ports: - name: nginx-service port: 80 targetPort: 80 nodePort: 30080 比如上述,定义了一个Service,对应的是具有key=name,value=nginx-pod这个标签的Pod,type定义为NodePort,宿主机端口为80,对应Pod端口为80,而nodePort为30080通过如下命令创建Servicekubectl create -f service-name.yaml 创建之后查看:[图片] 可看到Service被分配的ip,对应的port以及选择的标签信息(2)负载均衡目前k8s提供了两种负载均衡策略:RoundRobin和SessionAffinity1、RoundRobin:轮询模式2、SessionAffinity:基于客户端IP地址进行会话保持模式,请求第一次到哪个Pod,则后续还会继续转发到那个Pod。默认情况下,采用轮询模式,但也可以 通过设置spec.sessionAffinity设置为ClientIP启用SessionAffinity策略接下来验证一下默认的轮询模式:创建两个具有key=name,value=nginx-pod标签的Pod,容器内运行nginx。nginx-one:apiVersion: v1kind: Podmetadata: name: nginx-pod1 labels: name: nginx-podspec: containers: - name: nginx-pod1 image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 nginx-two:apiVersion: v1kind: Podm找到文件并进行修改,此处需要注意的是,由nginx镜像创建的容器并不具有vim和vi这两个编辑工具,所以这边使用sed或echo都行sed命令替换字符串格式是:sed -i 's/需要被替换字符串/替换后字符串/g' file-namesed -i 's/Welcome to nginx!/Welcome to nginx-pod two!/g' /usr/share/nginx/html/index.html 修改好后在浏览器访问:使用ip:nodePort访问[图片] [图片] 可以看到,service进行了负载均衡处理。三、集群外部访问Pod和Service(1)将Pod的端口号映射到宿主机比如将上述的nginx-pod1映射到主机的20080端口:apiVersion: v1kind: Podmetadata: name: nginx-pod1 labels: name: nginx-podspec: containers: - name: nginx-pod1 image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 hostPort: 20080
