####### NodePort [08:34:10 root@master1 service]#kubectl create deployment my-nginx --image=10.0.0.55:80/mykubernetes/pod_test:v0.1 --replicas=4 deployment.apps/my-nginx created [08:34:15 root@master1 service]#kubectl get deployments.apps NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 4/4 4 4 11s [08:34:26 root@master1 service]#kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-nginx-7678697fc-dgjwm 1/1 Running 0 18s 10.244.4.77 node2.noisedu.cn <none> <none> my-nginx-7678697fc-lvlsd 1/1 Running 0 18s 10.244.3.39 node1.noisedu.cn <none> <none> my-nginx-7678697fc-nbfx4 1/1 Running 0 18s 10.244.3.38 node1.noisedu.cn <none> <none> my-nginx-7678697fc-tgpjn 1/1 Running 0 18s 10.244.4.76 node2.noisedu.cn <none> <none> [08:34:33 root@master1 service]#kubectl get pod -o wide --show-labels NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS my-nginx-7678697fc-dgjwm 1/1 Running 0 28s 10.244.4.77 node2.noisedu.cn <none> <none> app=my-nginx,pod-template-hash=7678697fc my-nginx-7678697fc-lvlsd 1/1 Running 0 28s 10.244.3.39 node1.noisedu.cn <none> <none> app=my-nginx,pod-template-hash=7678697fc my-nginx-7678697fc-nbfx4 1/1 Running 0 28s 10.244.3.38 node1.noisedu.cn <none> <none> app=my-nginx,pod-template-hash=7678697fc my-nginx-7678697fc-tgpjn 1/1 Running 0 28s 10.244.4.76 node2.noisedu.cn <none> <none> app=my-nginx,pod-template-hash=7678697fc [08:36:16 root@master1 service]#curl 10.244.4.77 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [08:36:49 root@master1 service]#curl 10.244.3.39 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39! [08:36:55 root@master1 service]#curl 10.244.3.38 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [08:36:58 root@master1 service]#curl 10.244.4.76 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76! # 使用service,实现统一管理及负载均衡 [08:34:43 root@master1 service]#cat 01-service-test-nodePort.yml kind: Service apiVersion: v1 metadata: name: service-test1 spec: type: NodePort selector: app: my-nginx ports: - name: http protocol: TCP port: 80 targetPort: 80 nodePort: 30089 [08:37:03 root@master1 service]#kubectl apply -f 01-service-test-nodePort.yml service/service-test1 created [08:37:47 root@master1 service]#kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d service-test1 NodePort 10.100.98.41 <none> 80:30089/TCP 4s [08:37:51 root@master1 service]#kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-nginx-7678697fc-dgjwm 1/1 Running 0 3m46s 10.244.4.77 node2.noisedu.cn <none> <none> my-nginx-7678697fc-lvlsd 1/1 Running 0 3m46s 10.244.3.39 node1.noisedu.cn <none> <none> my-nginx-7678697fc-nbfx4 1/1 Running 0 3m46s 10.244.3.38 node1.noisedu.cn <none> <none> my-nginx-7678697fc-tgpjn 1/1 Running 0 3m46s 10.244.4.76 node2.noisedu.cn <none> <none> #集群内部访问 [08:38:01 root@master1 service]#curl 10.100.98.41 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [08:38:15 root@master1 service]#curl 10.100.98.41 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39! [08:38:16 root@master1 service]#curl 10.100.98.41 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76! [08:38:17 root@master1 service]#curl 10.100.98.41 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39! [08:38:17 root@master1 service]#curl 10.100.98.41 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [08:38:19 root@master1 service]#curl 10.100.98.41 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76! [08:38:23 root@master1 service]#curl 10.100.98.41 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! #集群外部通过宿主机IP 10.0.0.50 + nodePort - 30089访问 [08:39:51 root@hakeepalvied2 ~]#curl 10.0.0.50:30089 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [08:39:58 root@hakeepalvied2 ~]#curl 10.0.0.50:30089 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [08:39:59 root@hakeepalvied2 ~]#curl 10.0.0.50:30089 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76! [08:40:00 root@hakeepalvied2 ~]#curl 10.0.0.50:30089 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [08:40:00 root@hakeepalvied2 ~]#curl 10.0.0.50:30089 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39! [08:40:00 root@hakeepalvied2 ~]#curl 10.0.0.50:30089 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76! [08:40:01 root@hakeepalvied2 ~]#curl 10.0.0.50:30089 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! ==============================================
####### 无NodePort实验 # 删除NodePort的svc [08:38:37 root@master1 service]#kubectl delete -f 01-service-test-nodePort.yml service "service-test1" deleted [08:41:37 root@master1 service]#kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-nginx-7678697fc-dgjwm 1/1 Running 0 7m29s 10.244.4.77 node2.noisedu.cn <none> <none> my-nginx-7678697fc-lvlsd 1/1 Running 0 7m29s 10.244.3.39 node1.noisedu.cn <none> <none> my-nginx-7678697fc-nbfx4 1/1 Running 0 7m29s 10.244.3.38 node1.noisedu.cn <none> <none> my-nginx-7678697fc-tgpjn 1/1 Running 0 7m29s 10.244.4.76 node2.noisedu.cn <none> <none> [08:41:44 root@master1 service]#kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d # 开始配置ClusterIP [08:41:49 root@master1 service]#cat 01-service-test.yml kind: Service apiVersion: v1 metadata: name: service-test spec: selector: app: my-nginx ports: - name: http protocol: TCP port: 80 targetPort: 80 [08:42:35 root@master1 service]#kubectl apply -f 01-service-test.yml service/service-test created [08:42:54 root@master1 service]#kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d service-test ClusterIP 10.100.125.123 <none> 80/TCP 4s [08:42:58 root@master1 service]#kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-nginx-7678697fc-dgjwm 1/1 Running 0 8m48s 10.244.4.77 node2.noisedu.cn <none> <none> my-nginx-7678697fc-lvlsd 1/1 Running 0 8m48s 10.244.3.39 node1.noisedu.cn <none> <none> my-nginx-7678697fc-nbfx4 1/1 Running 0 8m48s 10.244.3.38 node1.noisedu.cn <none> <none> my-nginx-7678697fc-tgpjn 1/1 Running 0 8m48s 10.244.4.76 node2.noisedu.cn <none> <none> [08:41:49 root@master1 service]#cat 01-service-test.yml kind: Service apiVersion: v1 metadata: name: service-test spec: selector: app: my-nginx ports: - name: http protocol: TCP port: 80 targetPort: 80 [08:42:35 root@master1 service]#kubectl apply -f 01-service-test.yml service/service-test created [08:42:54 root@master1 service]#kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d service-test ClusterIP 10.100.125.123 <none> 80/TCP 4s [08:42:58 root@master1 service]#kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-nginx-7678697fc-dgjwm 1/1 Running 0 8m48s 10.244.4.77 node2.noisedu.cn <none> <none> my-nginx-7678697fc-lvlsd 1/1 Running 0 8m48s 10.244.3.39 node1.noisedu.cn <none> <none> my-nginx-7678697fc-nbfx4 1/1 Running 0 8m48s 10.244.3.38 node1.noisedu.cn <none> <none> my-nginx-7678697fc-tgpjn 1/1 Running 0 8m48s 10.244.4.76 node2.noisedu.cn <none> <none> # 集群内部访问没问题 [08:43:03 root@master1 service]#curl 10.100.125.123 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [08:44:05 root@master1 service]#curl 10.100.125.123 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [08:44:06 root@master1 service]#curl 10.100.125.123 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [08:44:07 root@master1 service]#curl 10.100.125.123 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39! [08:44:07 root@master1 service]#curl 10.100.125.123 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [08:44:07 root@master1 service]#curl 10.100.125.123 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39! [08:44:08 root@master1 service]#curl 10.100.125.123 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39! [08:44:09 root@master1 service]#curl 10.100.125.123 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76! [08:44:13 root@master1 service]#curl 10.100.125.123 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76! #集群外部访问,由于没有相应的端口暴露,所以拒绝 [08:41:23 root@hakeepalvied2 ~]#curl 10.0.0.50:30089 curl: (7) Failed to connect to 10.0.0.50 port 30089: Connection refused [08:44:39 root@hakeepalvied2 ~]#curl 10.0.0.50 curl: (7) Failed to connect to 10.0.0.50 port 80: Connection refused
#### 多端口暴露 [08:47:36 root@master1 service]#cat 02-service-mul-port.yaml kind: Service apiVersion: v1 metadata: name: service-test-duo spec: selector: app: my-nginx ports: - name: http protocol: TCP port: 80 targetPort: 80 - name: https protocol: TCP port: 443 targetPort: 443 [08:47:46 root@master1 service]#kubectl apply -f 02-service-mul-port.yaml service/service-test-duo created [08:48:25 root@master1 service]#kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d service-test-duo ClusterIP 10.108.138.19 <none> 80/TCP,443/TCP 3s [08:48:28 root@master1 service]#kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-nginx-7678697fc-dgjwm 1/1 Running 0 14m 10.244.4.77 node2.noisedu.cn <none> <none> my-nginx-7678697fc-lvlsd 1/1 Running 0 14m 10.244.3.39 node1.noisedu.cn <none> <none> my-nginx-7678697fc-nbfx4 1/1 Running 0 14m 10.244.3.38 node1.noisedu.cn <none> <none> my-nginx-7678697fc-tgpjn 1/1 Running 0 14m 10.244.4.76 node2.noisedu.cn <none> <none> # 使用http访问 [08:48:34 root@master1 service]#curl 10.108.138.19 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [08:49:20 root@master1 service]#curl 10.108.138.19 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [08:49:21 root@master1 service]#curl 10.108.138.19 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [08:49:21 root@master1 service]#curl 10.108.138.19 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [08:49:22 root@master1 service]#curl 10.108.138.19 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [08:49:22 root@master1 service]#curl 10.108.138.19 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [08:49:23 root@master1 service]#curl 10.108.138.19 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39! [08:49:23 root@master1 service]#curl 10.108.138.19 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76! [08:49:24 root@master1 service]#curl 10.108.138.19 # 使用https访问,此项需要后端nginx开启端口443,若未开启,则会如下图所示 [08:49:24 root@master1 service]#curl -v -k https://10.108.138.19 * Rebuilt URL to: https://10.108.138.19/ * Trying 10.108.138.19... * TCP_NODELAY set * connect to 10.108.138.19 port 443 failed: Connection refused * Failed to connect to 10.108.138.19 port 443: Connection refused * Closing connection 0 curl: (7) Failed to connect to 10.108.138.19 port 443: Connection refused
# 下面两个yaml文件同上述实验效果一直 [08:58:26 root@master1 service]#cat 03-service-nodeport.yml apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: NodePort ports: - port: 80 nodePort: 30099 selector: app: my-nginx [08:59:09 root@master1 service]#cat 04-service-nodeport-local.yml apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: NodePort externalTrafficPolicy: Local ports: - port: 80 nodePort: 30099 selector: app: my-nginx # 特别注意 externalTrafficPolicy选项,分local和cluster分发策略 [08:55:45 root@master1 service]#kubectl explain service.spec.externalTrafficPolicy KIND: Service VERSION: v1 FIELD: externalTrafficPolicy <string> DESCRIPTION: externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. "Local" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. "Cluster" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.