第6章:Kubernetes网络


1. Service存在的意义

防止Pod失联(服务发现)
定义一组Pod的访问策略(负载均衡)

负载均衡器类型:
- 四层,传输层,基于IP和端口
- 七层,应用层,基于应用协议转发啊,例如http协议

这里说的几层是指OSI七层模型。

user -> lb –> web

创建一个deploy
[root@k8s-m1 chp4]# kubectl create deployment web-nginx-0811 --image=nginx
deployment.apps/web-nginx-0811 created
扩展
[root@k8s-m1 chp4]# kubectl scale deployment web-nginx-0811 --replicas=3
获取创建的pod信息
[root@k8s-m1 chp4]# kubectl get pod -o wide |grep 0811
web-nginx-0811-55cf896fbc-6fm7p   1/1     Running   0          62s     10.244.111.225   k8s-n2   <none>           <none>
web-nginx-0811-55cf896fbc-9z47s   1/1     Running   0          41s     10.244.111.227   k8s-n2   <none>           <none>
web-nginx-0811-55cf896fbc-qfmb9   1/1     Running   0          41s     10.244.111.226   k8s-n2   <none>           <none>

标签查看
[root@k8s-m1 chp4]# kubectl get pods -l app=web-nginx-0811
NAME                              READY   STATUS    RESTARTS   AGE
web-nginx-0811-55cf896fbc-6fm7p   1/1     Running   0          2m57s
web-nginx-0811-55cf896fbc-9z47s   1/1     Running   0          2m36s
web-nginx-0811-55cf896fbc-qfmb9   1/1     Running   0          2m36s
创建服务方法1
命令行的形式暴露deploy创建接口
[root@k8s-m1 chp4]# kubectl expose deployment web-nginx-0811 --port=80

暴露的形式是 clusterIP 
[root@k8s-m1 chp4]# kubectl get svc|grep 0811
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
web-nginx-0811   ClusterIP   10.108.232.47    <none>        80/TCP         55s

查看endpoint 节点信息
[root@k8s-m1 chp6]# kubectl get ep|egrep ‘0811|N‘
NAME             ENDPOINTS                                                                AGE
web-nginx-0811   10.244.111.225:80,10.244.111.226:80,10.244.111.227:80                    8m8s

[root@k8s-m1 chp6]# kubectl get pods -o wide |grep 0811
web-nginx-0811-55cf896fbc-6fm7p   1/1     Running   0          15m     10.244.111.225   k8s-n2   <none>           <none>
web-nginx-0811-55cf896fbc-9z47s   1/1     Running   0          14m     10.244.111.227   k8s-n2   <none>           <none>
web-nginx-0811-55cf896fbc-qfmb9   1/1     Running   0          14m     10.244.111.226   k8s-n2   <none>           <none>


[root@k8s-m1 chp6]# kubectl expose deployment web-nginx-0811 --port=80 --target-port=80 --type=NodePort -o yaml --dry-run=client>service.yaml
[root@k8s-m1 chp6]# cat service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: web-nginx-0811
  name: web-nginx-0811
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: web-nginx-0811
  type: NodePort

[root@k8s-m1 chp6]# kubectl apply -f service.yaml
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
service/web-nginx-0811 configured

svc的形式已经变为NodePort 模式
[root@k8s-m1 chp6]# kubectl get svc|grep 0811
web-nginx-0811   NodePort    10.108.232.47    <none>        80:32597/TCP   11m

固定service 暴露的端口
[root@k8s-m1 chp6]# cat service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: web-nginx-0811
  name: web-nginx-0811
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 31024
  selector:
    app: web-nginx-0811
  type: NodePort
[root@k8s-m1 chp6]# kubectl apply -f service.yaml
service/web-nginx-0811 configured
[root@k8s-m1 chp6]# kubectl get svc|grep 0811
web-nginx-0811   NodePort    10.108.232.47    <none>        80:31024/TCP   14m


2.Pod与 Service的关系

通过 label- selector相关联
通过 Service实现Pod的负载均衡(TCP/DP4层)

第6章:Kubernetes网络

3. Service三种类型

◆ ClusterIN:集群内部使用
◆ Node Port:对外暴露应用
◆ Load Balancer:对外暴露应用,适用公有云


ClusterIP:默认,分配一个稳定的P地址,即vP,只能在集群内部访问(同 Namespace内的Pod)

第6章:Kubernetes网络

Nodeport:在每个节点上启用一个端口来暴露服务,可以在集群外部访问。也会分配一个稳定内部集群P地址
访问地址:< NodelP>:< NodePort>

第6章:Kubernetes网络

LoadBalancer:与 Nodeport类似,在每个节点上启用一个端口来暴露服务。 除此之外, Kubernetes 会请求底层云平台上的负载均衡器,将每个Node ( 【NodelP】:【NodePort】)作为后端添加进去。

第6章:Kubernetes网络


4. Service代理模式


第6章:Kubernetes网络



用户 -> 域名 -> 负载均衡器(公网IP) -> NodePort(所有节点) -> Pod

每部署一个应用,那么都要在负载均衡器配置,这样比较麻烦?

service是由哪个组件实现?
kube-proxy


iptables -vnL


第一步:接受流量

NodePort访问入口规则:
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/web:" -m tcp --dport 30012 -j KUBE-SVC-BIJGBSD4RZCCZX5R

ClusterIP 访问入口规则:
-A KUBE-SERVICES -d 10.100.158.44/32 -p tcp -m comment --comment "default/web: cluster IP" -m tcp --dport 80 -j KUBE-SVC-BIJGBSD4RZCCZX5R


iptables 用作于负载均衡器

第6章:Kubernetes网络
[root@k8s-m1 ~]# iptables-save |grep web-nginx-0811
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp --dport 31024 -j KUBE-MARK-MASQ
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp --dport 31024 -j KUBE-SVC-R7TX7W65X4MU5SZ3
-A KUBE-SEP-N4MDZZ7SXQJUJITR -s 10.244.111.227/32 -m comment --comment "default/web-nginx-0811:" -j KUBE-MARK-MASQ
-A KUBE-SEP-N4MDZZ7SXQJUJITR -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp -j DNAT --to-destination 10.244.111.227:80
-A KUBE-SEP-ODVS6KZQDDIOI3QQ -s 10.244.111.225/32 -m comment --comment "default/web-nginx-0811:" -j KUBE-MARK-MASQ
-A KUBE-SEP-ODVS6KZQDDIOI3QQ -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp -j DNAT --to-destination 10.244.111.225:80
-A KUBE-SEP-XIZSVMKGA7NM5PF3 -s 10.244.111.226/32 -m comment --comment "default/web-nginx-0811:" -j KUBE-MARK-MASQ
-A KUBE-SEP-XIZSVMKGA7NM5PF3 -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp -j DNAT --to-destination 10.244.111.226:80
-A KUBE-SERVICES ! -s 10.244.0.0/16 -d 10.108.232.47/32 -p tcp -m comment --comment "default/web-nginx-0811: cluster IP" -m tcp --dport 80 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.108.232.47/32 -p tcp -m comment --comment "default/web-nginx-0811: cluster IP" -m tcp --dport 80 -j KUBE-SVC-R7TX7W65X4MU5SZ3
-A KUBE-SVC-R7TX7W65X4MU5SZ3 -m comment --comment "default/web-nginx-0811:" -m statistic --mode random --probability 0.33333333349 -j KUBE-SEP-ODVS6KZQDDIOI3QQ
-A KUBE-SVC-R7TX7W65X4MU5SZ3 -m comment --comment "default/web-nginx-0811:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-XIZSVMKGA7NM5PF3
-A KUBE-SVC-R7TX7W65X4MU5SZ3 -m comment --comment "default/web-nginx-0811:" -j KUBE-SEP-N4MDZZ7SXQJUJITR
View Code


[root@k8s-m1 ~]# iptables-save |grep web-nginx-0811|egrep ‘80|31024‘
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp --dport 31024 -j KUBE-MARK-MASQ
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp --dport 31024 -j KUBE-SVC-R7TX7W65X4MU5SZ3
-A KUBE-SEP-N4MDZZ7SXQJUJITR -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp -j DNAT --to-destination 10.244.111.227:80
-A KUBE-SEP-ODVS6KZQDDIOI3QQ -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp -j DNAT --to-destination 10.244.111.225:80
-A KUBE-SEP-XIZSVMKGA7NM5PF3 -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp -j DNAT --to-destination 10.244.111.226:80
-A KUBE-SERVICES ! -s 10.244.0.0/16 -d 10.108.232.47/32 -p tcp -m comment --comment "default/web-nginx-0811: cluster IP" -m tcp --dport 80 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.108.232.47/32 -p tcp -m comment --comment "default/web-nginx-0811: cluster IP" -m tcp --dport 80 -j KUBE-SVC-R7TX7W65X4MU5SZ3

[root@k8s-m1 ~]# iptables-save |grep web-nginx-0811|egrep ‘31024‘
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp --dport 31024 -j KUBE-MARK-MASQ
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp --dport 31024 -j KUBE-SVC-R7TX7W65X4MU5SZ3

[root@k8s-m1 ~]# iptables-save |grep KUBE-SVC-R7TX7W65X4MU5SZ3
:KUBE-SVC-R7TX7W65X4MU5SZ3 - [0:0]
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp --dport 31024 -j KUBE-SVC-R7TX7W65X4MU5SZ3
-A KUBE-SERVICES -d 10.108.232.47/32 -p tcp -m comment --comment "default/web-nginx-0811: cluster IP" -m tcp --dport 80 -j KUBE-SVC-R7TX7W65X4MU5SZ3
-A KUBE-SVC-R7TX7W65X4MU5SZ3 -m comment --comment "default/web-nginx-0811:" -m statistic --mode random --probability 0.33333333349 -j KUBE-SEP-ODVS6KZQDDIOI3QQ
-A KUBE-SVC-R7TX7W65X4MU5SZ3 -m comment --comment "default/web-nginx-0811:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-XIZSVMKGA7NM5PF3
-A KUBE-SVC-R7TX7W65X4MU5SZ3 -m comment --comment "default/web-nginx-0811:" -j KUBE-SEP-N4MDZZ7SXQJUJITR


[root@k8s-m1 ~]# iptables-save |grep KUBE-SEP-XIZSVMKGA7NM5PF3
:KUBE-SEP-XIZSVMKGA7NM5PF3 - [0:0]
-A KUBE-SEP-XIZSVMKGA7NM5PF3 -s 10.244.111.226/32 -m comment --comment "default/web-nginx-0811:" -j KUBE-MARK-MASQ
-A KUBE-SEP-XIZSVMKGA7NM5PF3 -p tcp -m comment --comment "default/web-nginx-0811:" -m tcp -j DNAT --to-destination 10.244.111.226:80



[root@k8s-m1 ~]# kubectl get configmaps -n kube-system
NAME                                 DATA   AGE
calico-config                        4      19d
coredns                              1      19d
extension-apiserver-authentication   6      19d
kube-proxy                           2      19d
kubeadm-config                       2      19d
kubelet-config-1.18                  1      19d
[root@k8s-m1 ~]# kubectl edit configmaps kube-proxy -n kube-system
configmap/kube-proxy edited




5. Service dns:名称


DNS 服务监视 Kubernetes api ,为每一个 Service 创建DNS记录用于域名解析。


ClusterIP A记录格式:<service-name>.< namespace-name>.svc.cluster.local
示例:my-svc.my-namespace.svc.cluster.local

https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns/coredns



1.采用 NodePort对外暴露应用,前面加一个LB实现统一访问入口
2.优先使用PVS代理模式
3.集群内应用采用DNS名称访问


6. Ingress为弥补 NodePort不足而生

NodePort 存在的不足:
一个端口只能一个服务使用,端口需提前规划
只支持4层负载均衡







7.Pod与 ngress的关系


通过 Service相关联
通过 Ingress Controller 实现Pod的负载均衡
支持TCP/UDP 4层和HTTP 7层

第6章:Kubernetes网络



8. Ingress Controller

1.部署 Ingress Controller
2.创建 Ingress规则


第6章:Kubernetes网络

第6章:Kubernetes网络




9. Ingress

第6章:Kubernetes网络




第6章:Kubernetes网络

第6章:Kubernetes网络

上一篇:Intellij IDEA 与maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.PathTranslator was bound


下一篇:js判断是否安装app并其下载或打开