Linux - 网络之NodePort

####### 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.

  

上一篇:cf1141 E. Superhero Battle(思维)


下一篇:实验四 Web服务器2