Kubernetes学习(七)——Service

代码 代码 1531 人阅读 | 0 人回复

<
本章节次要引见kubernetes的流量背载组件:Service战Ingress。
1 Service引见

正在kubernetes中,pod是使用程序的载体,我们能够经由过程pod的ip去会见使用程序,可是pod的ip地点没有是牢固的,那也便意味着没有便利间接采纳pod的ip对效劳停止会见。
为理解决那个成绩,kubernetes供给了Service资本,Service会对供给统一个效劳的多个pod停止散开,并且供给一个赞成的进口地点。经由过程会见Service的进口地点就可以会见到前面的pod效劳。
214839vahmhorhhwozh8h8.jpg

Service正在很多状况下只是一个观点,实正起感化的实际上是kube-proxy效劳历程,每一个Node节面上皆运转着一个kube-proxy效劳历程。当创立Service的时分会经由过程api-server背etcd写进创立的service的疑息,而kube-proxy会基于监听的机造发明这类Service的变动,然后他会将最新的Service的疑息转换成对应的会见划定规矩。
214840idfkdozidzoano74.jpg

  1. # 10.97.97.97:80 是service供给的会见进口
  2. # 当会见那个进口的时分,能够发明前面有三个pod的效劳正在等候挪用,
  3. # kube-proxy会基于rr(轮询)的战略,将恳求分收到此中一个pod上来
  4. # 那个划定规矩会同时正在散群内乱的一切节面上皆天生,以是正在任何一个节面上会见皆能够.
  5. [root@node ~]# ipvsadm -Ln
  6. IP Virtual Server version 1.2.1 (size=4096)
  7. Prot LocalAddress:Port Scheduler Flags
  8.   -> RemoteAddress:Port                        Forward                        Weight                ActiveConn                InActConn
  9. TCP         10.97.97.97:80 rr
  10.   -> 10.244.1.39:80                                Masq                        1                        0                                0
  11.   -> 10.244.1.40:80                                Masq                        1                        0                                0
  12.   -> 10.244.1.33:80                                Masq                        1                        0                                0
复造代码
kube-proxy今朝撑持三种事情形式:
userspace形式
userspace形式下,kube-proxy会为每个Service创立一个监听端心,收背Cluster IP的恳求被Iptables划定规矩重定背到kube-proxy监听的端心上,kube-proxy按照LB算法挑选一个供给效劳的Pod并战其成立链接,以将恳求转收到Pod上。
该形式下,kube-proxy充任了一个四层卖力平衡器的脚色。因为kube-proxy运转正在userspace中,正在停止转收处置时会增长内乱核战用户空间之间的数据拷贝,固然比力不变,可是服从比力低。
214840jyzzy36x2533fx3z.jpg

iptables形式
iptables形式下,kube-proxy为service后真个每一个Pod创立对应的iptables划定规矩,间接将收背Cluster IP的恳求重定背到一个Pod IP。
该形式下kube-proxy没有负担四层背载平衡器的脚色,只卖力创立iptables划定规矩。该形式的长处是较userspace形式服从更下,但不克不及体用灵敏的LB战略,当后端Pod不成用时也没法停止重试。
214841r5ulz5151l65lucl.jpg

ipvs形式
ipvs形式战iptables相似,kube-proxy监控Pod的变化并创立响应的ipvs划定规矩。ipvs相对iptables转收服从更下。除此以外,ipvs撑持更多的LB算法。
214841mmhi9tlmlw9zgd8d.jpg

  1. # 此形式必需装置ipvs内乱核模块,不然会升级为iptables
  2. [root@master ~]# yum install ipvsadm -y
  3. # 开启ipvs,正在mode:"ipvs"
  4. [root@master ~]# kubectl edit cm kube-proxy -n kube-system
  5. [root@master ~]# kubectl delete pod -l k8s-app=kube-proxy -n kube-system
  6. [root@master ~]# ipvsadm -Lb
  7. IP Virtual Server version 1.2.1 (size=4096)
  8. Prot LocalAddress:Port Scheduler Flags  
  9. -> RemoteAddress:Port                        Forward                        Weight                ActiveConn                InActConnTCP         10.97.97.97:80 rr  -> 10.244.1.39:80                                Masq                        1                        0                                0  
  10. -> 10.244.1.40:80                                Masq                        1                        0                                0  
  11. -> 10.244.1.33:80                                Masq                        1                        0                                0
复造代码
214842q7tta941297aq8ee.jpg

2 Service范例

Service的资本浑单文件:
  1. kind: Service                                         # 资本范例
  2. apiVersion: v1                                        # 资本版本
  3. metadata:                                                # 元数据
  4.   name: service                                        # 资本称号
  5.   namespace: dev                                # 定名空间
  6. spec:                                                        # 详细形貌  
  7.   selector:                                                # 标签挑选器,用于肯定当前service的代办署理哪些pod
  8.     app: nginx
  9.   type:                                                        # Service范例,指定service的会见方法
  10.   clusterIP:                                        # 假造效劳的ip地点  
  11.   sessionAffinity:                                # session亲战性,撑持ClienetIP、None两个选项
  12.   ports:                                                # 端心疑息   
  13.     - protocol: TCP
  14.         port: 3017                                # service端心
  15.         targetPort: 5003                # pod端心
  16.         nodePort: 31122                        # 主机端心
复造代码


  • ClusterIP:默许值,它是Kubernetes体系主动分派的假造IP,只能正在散群内乱部会见
  • NodePort:将Service经由过程指定的Node上的端心裸露给内部,经由过程此办法,就能够正在散群内部会见效劳
  • LoadBalancer:利用中接背载平衡完成到效劳的背载分收,留意此形式需求内部云状况撑持
  • ExternalName:把散群内部的效劳引进散群内乱部,间接利用
3 Service利用

3.1 尝试状况筹办

正在利用service之前,起首操纵Deployment创立出3个pod,留意要为pod设置app=nginx-pod的标签
创立deploymenet.yaml,内乱容以下:
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.   name: pc-deployment
  5.   namespace: dev
  6. spec:
  7.   replicas: 3  
  8.   selector:   
  9.     matchLabels:      
  10.       app: nginx-pod  
  11.   template:   
  12.     metadata:      
  13.       labels:        
  14.         app: nginx-pod   
  15.     spec:      
  16.       containers:      
  17.       - name: nginx        
  18.         image: nginx:1.17.1        
  19.         ports:        
  20.         - containerPort: 80
复造代码
  1. [root@master ~]# kubectl create -f deployment.yaml
  2. deployment.apps/pc-deployment created
  3. # 检察pod详情
  4. [root@master ~]# kubectl get pods -n dev -o wide --show-labels
  5. NAME                                                        READY        STATUS                IP                        NODE        LABELS
  6. pc-deployment-66cb59b984-8p84h        1/1                Running                10.244.1.40        node1        app=nginx-pod
  7. pc-deployment-66cb59b984-vx8vx        1/1                Running                10.244.2.33        node2        app=nginx-pod
  8. pc-deployment-66cb59b984-wnncx        1/1                Running                10.244.1.39        node1        app=nginx-pod
  9. # 为了便利前面的测试,修正下三台nginx的index.html页里(三台修正的IP地点纷歧致)
  10. # kubectl exec -it pc-deployment-66cb59b984-8p84h -n dev /bin/sh
  11. # echo "10.244.1.40" > /usr/share/nginx/html/index.html
  12. # 修正终了以后,会见测试
  13. [root@master ~]# curl 10.244.1.4010.244.1.40
  14. [root@master ~]# curl 10.244.2.330.244.2.33
  15. [root@master ~]# curl 10.244.1.3910.244.1.39
复造代码
3.2 ClusterIP范例的Service

创立service-clusterip.yaml文件
  1. apiVersion: v1
  2. kind: Service
  3. metadata:  
  4.   name: service-clusterip  
  5.   namespace: dev
  6. spec:  
  7.   selector:   
  8.     app: nginx-pod  
  9.   clusterIP: 10.97.97.97                        # service的ip地点,假如没有写,默许会天生一个  
  10.   type: ClusterIP  
  11.   ports:  
  12.   - port: 80                                                # Service端心   
  13.     targetPort: 80                                        # pod端心
复造代码
  1. # 创立service[root@master ~]# kubectl create -f service-clusterip.yaml
  2. service/service-clusterip created
  3. # 检察service
  4. [root@master ~]# kubectl get svc -n dev -o wide
  5. NAME                                TYPE                        CLUSTER-IP                        EXTERNAL-IP                PORT(S)                AGE
  6. service-clusterip        ClusterIP                10.97.97.97                        <none>                        80/TCP                13s
  7. # 检察service的具体疑息
  8. # 正在那里有一个Endpoints列表,内里便是当前service能够背载到的效劳器进口
  9. [root@master ~]# kubectl describe svc service-clusterip -n dev
  10. Name:                                                service-clusterip
  11. Namespace:                                        dev
  12. Labels:                                                <none>
  13. Annotations:                                <none>
  14. Selector:                                        app=nginx-pod
  15. Type:                                                ClusterIP
  16. IP:                                                        10.97.97.97
  17. Port:                                                <unset> 80/TCP
  18. TargetPort:                                        80/TCP
  19. Endpoints:                                        10.244.1.39:80,10.244.1.40:80,10.244.2.33:80
  20. Session Affinity:                        None
  21. Events:                                                <none>
  22. # 检察ipvs的映照划定规矩
  23. [root@master ~]# ipvsadm -Ln
  24. TCP         10.97.97.97:80 rr
  25.   -> 10.244.1.39:80                                Masq                        1                        0                                0  
  26.   -> 10.244.1.40:80                                Masq                        1                        0                                0  
  27.   -> 10.244.2.33:80                                Masq                        1                        0                                0  
  28. # 会见10.97.97.97:80察看结果
  29. [root@master ~]# curl 10.97.97.97:8010.244.2.33
复造代码
Endpoirt
Endpoint是kubernetes中的一个资本工具,存储正在etcd中,用去记载一个service对应的一切pod会见地点,它是按照service婚配文件中selector形貌发生的。
一个Service由一组Pod构成,那些Pod经由过程Endpoints裸露出去,Endpoints是完成是效劳的端面会萃。换句话道,service战pod之间的联络是经由过程endpoints完成的。
214842cp9chbp4qlf2pmlq.jpg

  1. [root@master ~]# kubectl get endpoints -n dev -o wide
  2. NAME                                ENDPOINTS                                                                                AGE
  3. service-clusterip        10.244.1.39:80,10.244.1.40:80,10.244.2.33:80        50m
复造代码
背载分收战略
对Service的会见被分收到了后真个Pod上来,今朝kubernetes供给了两种背载分收战略:


  • 假如没有界说,默许利用kube-proxy测战略,好比随机、轮询
  • 基于客户端地点的会话连结形式,即去自统一个客户端倡议的一切恳求城市转收到一个牢固的Pod上,此形式可使正在spec中增加sessionAffinity: ClientIP选项
  1. # 检察ipvs的映照划定规矩(rr 轮询)[root@master ~]# ipvsadm -Ln
  2. TCP         10.97.97.97:80 rr  
  3.   -> 10.244.1.39:80                                Masq                        1                        0                                0  
  4.   -> 10.244.1.40:80                                Masq                        1                        0                                0  
  5.   -> 10.244.2.33:80                                Masq                        1                        0                                0
  6. # 轮回会见测试
  7. [root@master ~]# while true;do curl 10.97.97.97:80; sleep 5;done;
  8. 10.244.1.40
  9. 10.244.1.39
  10. 10.244.2.33
  11. 10.244.1.40
  12. 10.244.1.39
  13. 10.244.2.33
  14. # 修正分收战略----sessionAffinity:ClientIP
  15. # 正在设置文件service-clusterip.yaml的spec下增加:sessionAffinity:ClientIP
  16. # 检察ipvs划定规矩【persistent 代表耐久】
  17. [root@master ~]# ipvsadm -Ln
  18. TCP         10.97.97.97:80 rr persistent 10800  
  19.   -> 10.244.1.39:80                                Masq                        1                        0                                0  
  20.   -> 10.244.1.40:80                                Masq                        1                        0                                0  
  21.   -> 10.244.2.33:80                                Masq                        1                        0                                0
  22. # 轮回会见测试
  23. [root@master ~]# while true;do curl 10.97.97.97:80; sleep 5;done;
  24. 10.244.2.33
  25. 10.244.2.33
  26. 10.244.2.33
  27. # 删除service
  28. [root@master ~]# kubectl delete -f service-clusterip.yaml
  29. service/service-clusterip deleted
复造代码
3.3 HeadLiness范例的Service

正在某些场景中,开拓职员能够没有念利用Service供给的背载平衡功用,而期望本人去掌握背载平衡战略,针对那其中状况,kubernetes供给了HeadLiness Service,那类Service没有会分派ClusterIP,假如念要会见service,只能经由过程service的域名停止查询。
创立service-headliness.yaml
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4.   name: service-headliness  
  5.   namespace: dev
  6. spec:
  7.   selector:
  8.     app: nginx-pod
  9.   clusterIP: None                                        # 将clusterIP设置为None,便可创立headliness Service  
  10.   type: ClusterIP  
  11.   ports:  
  12.   - port: 80
  13.     targetPort: 80
复造代码
  1. # 创立service[root@master ~]# kubectl create -f service-headliness.yaml
  2. service/service-headliness created
  3. # 获得service,发明CLUSTER-IP已分派
  4. [root@master ~]# kubectl get svc service-headliness -n dev -o wide
  5. NAME                                TYPE                CLUSTER-IP        EXTERNAL-IP                PORT(S)        AGE                SELECTOR
  6. service-headliness        ClusterIP        None                <none>                        80/TCP        11s                app=nginx-pod
  7. # 检察service详情
  8. [root@master ~]# kubectl describe svc service-headliness -n dev -o -wide
  9. Name:                                                service-headliness
  10. Namespace:                                        dev
  11. Labels:                                                <none>
  12. Annotations:                                <none>
  13. Selector:                                        app=nginx-pod
  14. Type:                                                ClusterIP
  15. IP:                                                        None
  16. Port:                                                <unset> 80/TCP
  17. TargetPort:                                        80/TCP
  18. Endpoints:                                        10.244.1.39:80,10.244.1.40:80,10.244.2.33:80
  19. Session Affinity:                        None
  20. Events:                                                <none>
  21. # 检察域名的剖析状况
  22. [root@master ~]# kubectl exec -it pc-deployment-66cb59b984-8p84h -n dev /bin/sh/
  23. # cat /etc/resolv.confnameserver
  24. 10.96.0.10
  25. search dev.svc.cluster.local svc.cluster.local cluster.local
  26. # 假如本机出有dig,需求装置dig东西
  27. [root@master ~]#  yum -y install bind-utils
  28. [root@master ~]# dig @10.96.0.10 service-headlilness.dev.svc.cluster.local
  29. service-headliness.dev.svc.cluster.local. 30 IN A 10.244.1.40
  30. service-headliness.dev.svc.cluster.local. 30 IN A 10.244.1.39
  31. service-headliness.dev.svc.cluster.local. 30 IN A 10.244.2.33
复造代码
3.4 NodePort范例的Service

正在之前的样例中,创立的Service的ip地点只要散群内乱部才能够会见,假如期望将Service裸露给散群内部利用,那末便要利用到别的一中范例Service,称为NodePort范例。NodePort的事情道理实在便是将service的端心映照到Node的一个端心上,然后就能够经由过程NodeIp:NodePort去会见service了。
214842g16qmllp61vwivyy.jpg

创立service-nodeport.yaml
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4.   name: service-nodeport  
  5.   namespace: dev
  6. spec:
  7.   selector:
  8.     app: nginx-pod  
  9.   type: NodePort                # Service范例  
  10.   ports:  
  11.   - port: 80   
  12.     nodePort: 30002                # 指定绑定的node的端心(默许与值范畴是:30000-32767),假如没有指定,会默许分派   
  13.     targetPort: 80
复造代码
  1. # 创立service
  2. [root@master ~]# kubectl create -f service-nodeport.yaml
  3. service/service-nodepoint created
  4. # 检察service
  5. [root@master ~]# kubectl get svc -n dev -o wide
  6. NAME                                TYPE                CLUSTER-IP                EXTRNAL-IP        PORT(S)                        SELECTOR
  7. service-nodeport        NodePort        10.105.64.191        <none>                80:30002/TCP        app=nginx-pod
  8. # 接下去能够通诺电脑主机的阅读器来会见散群中随便一个nodeip的30002端心,便可会见到pod.
复造代码
3.5 LoadBalancer范例的Service

LoadBalancer战NodePort实际上是统一种方法,目标皆是背中裸露一个端心,区分正在于LoadBalancer会正在散群的内部再去做一个背载平衡装备,而那个装备需求内部状况撑持的,内部效劳收收到那个装备上的恳求,会被装备背载以后转收到散群中。
214842sxw8ozzawoo6s141.jpg

3.6 ExternalName范例的Service

ExternalName范例的Service用于引进散群内部的效劳,它经由过程externalName属性指定内部一个效劳的地点,然后正在散群内乱部会见此service就能够会见到内部效劳了。
214843on5k8mmemffkmolm.jpg

创立service-externalname.yaml
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4.   name: service-externalname  
  5.   namespace: dev
  6. spec:
  7.   type: ExternalName                        # service范例  
  8.   externalName: www.百度.com        # 改成ip地点就能够
复造代码
  1. # 创立service
  2. [root@master ~]# kubectl create -f service-externalname.yaml
  3. service/service-externalname created
  4. # 域名剖析[root@master ~]# dig @10.96.0.10 service-externalname.dev.svc.cluster.local
  5. service-externalname.dev.svc.cluster.local. 30 IN CNAME www.百度.com.
  6. www.百度.com                        30                        IN                CNAME        www.a.shifen.com.
  7. www.a.shifen.com.                30                        IN                A                39.156.66.18
  8. www.a.shifen.com.                30                        IN                A                39.156.66.14
复造代码
4 Ingress引见

正在前里课程中曾经提到,Service对散群以外裸露效劳的次要方法有两种:NodePort战LoadBalancer,可是那两种方法,皆有必然的缺陷:


  • NodePort方法的缺陷是会占用很多散群机械的端心,那末当散群效劳变多的时分,那个缺陷便愈创造隐
  • LB方法的缺陷是每一个service需求一个LB,华侈、费事,并且需求kubernetes以外的装备的撑持。
基于这类近况,kubernetes供给了Ingress资本工具,Ingress只需求一个NodePort大概一个LB就能够满意裸露多个Service的需供。事情机造大抵以下图暗示:
214843o1raxydmz2ixr5a4.jpg

实践上,Ingress相称于一个7层的背载平衡器,是kubernetes对反背代办署理的一个笼统,它的事情道理相似于Nginx,能够了解成正在Ingress里成立诸多映照划定规矩,Ingress Controller经由过程监听那些设置划定规矩并转化成Nginx的设置,然后对内部供给效劳。正在那里有两个核心观点:


  • ingress:kubernetes中的一个工具,感化便界说恳求怎样转收到service的划定规矩
  • ingress controller:具体完成收背代办署理及背载平衡的程序,对ingress界说的划定规矩停止剖析,按照设置的划定规矩去完成恳求转收,完成方法有很多,好比Nginx、Contour、Haproxy等等。
Ingress(以Nginx为例)的事情道理以下:

  • 用户编写Ingress划定规矩,阐明哪一个域名对应kubernetes散群中欧冠的哪一个Service
  • Ingress掌握器静态感知Ingress效劳划定规矩的变化,然后天生一段对应的Nginx设置
  • Ingress掌握器会将天生的Nginx设置写进到一个运转着Nginx效劳中,并静态更新
  • 到此为行,实在实正正在事情的便是Nginx了,内乱部设置了用户界说的恳求转收划定规矩
214844m538kbpiigoobjbk.jpg

5 Ingress利用

5.1 状况筹办

拆建ingress状况
  1. # 创立文件夹
  2. [root@master ~]# mkdir ingress-controller
  3. [root@master ~]# cd ingress-controller/
  4. # 获得ingress-nginx,本次案例利用的是0.30版本
  5. [root#master ingress-controller]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
  6. [root#master ingress-controller]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
  7. # 修正mandatory.yaml文件中的堆栈(自己尝试没有需求修正也能够)
  8. # 修正quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0
  9. # 为quay-mirror.qiniu.com/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0
  10. # 创立ingress-nginx
  11. [root@master ingress-controller]# kubectl apply -f ./
  12. # 检察ingress-nginx
  13. [root@master ingress-controller]# kubectl get pod -n ingress-nginx
  14. NAME                                                                                        READY        STATUS                RESTARTS                AGE
  15. pod/nginx-ingress-controller-fbf967dd5-4qpbp        1/1                Running                0                                12h
  16. # 检察service
  17. [root@master ingress-controller]# kubectl get svc -n ingress-nginx
  18. NAME                        TYPE                CLUSTER-IP                EXTERNAL-IP        PORT(S)                                                AGE
  19. ingress-nginx        NodePort        10.98.75.163        <none>                80:32240/TCP,443:31335/TCP        11h
复造代码
筹办service战pod
为了前面的尝试比力便利,创立以下图所示的模子
214844lqqb547teer1hzbx.jpg

创立tomcat-nginx.yaml
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.   name: nginx-deployment  
  5.   namespace: dev
  6. spec:
  7.   replicas: 3  
  8.   selector:   
  9.     matchLabels:
  10.       app: nginx-pod  
  11.   template:
  12.     metadata:   
  13.       labels:     
  14.         app: nginx-pod
  15.     spec:   
  16.       containers:      
  17.       - name: nginx        
  18.         image: nginx:1.17.1        
  19.         ports:        
  20.         - containerPort: 80
  21. ---
  22. apiVersion: apps/v1
  23. kind: Deployment
  24. metadata:
  25.   name: tomat-deployment  
  26.   namespace: dev
  27. spec:  
  28.   replicas: 3  
  29.   selector:   
  30.     matchLabels:      
  31.       app: tomcat-pod  
  32.   template:   
  33.     metadata:      
  34.       labels:        
  35.         app: tomcat-pod   
  36.     spec:      
  37.       containers:      
  38.       - name: tomcat        
  39.         image: tomcat:8.5-jre10-slim        
  40.         ports:        
  41.         - containerPort: 8080
  42. ---
  43. apiVersion: v1
  44. kind: Service
  45. metadata:  
  46.   name: nginx-service  
  47.   namespace: dev
  48. spec:  
  49.   selector:   
  50.     app: nginx-pod  
  51.   clusterIP: None  
  52.   type: ClusterIP  
  53.   ports:  
  54.   - port: 80   
  55.     targetPort: 80
  56. ---
  57. apiVersion: v1
  58. kind: Service
  59. metadata:  
  60.   name: tomcat-service  
  61.   namespace: dev
  62. spec:  
  63.   selector:
  64.     app: tomcat-pod  
  65.   clusterIP: None  
  66.   type: ClusterIP  
  67.   ports:  
  68.   - port: 8080   
  69.     targetPort: 8080
复造代码
  1. # 创立[root@master ~]# kubectl create -f tomcat-nginx.yaml
  2. # 检察
  3. [root@master ~]# kubectl get svc -n dev
  4. NAME                                TYPE                        CLUSTER-IP                        EXTERNAL-IP                PORT(S)                AGE
  5. nginx-service                ClusterIP                None                                <none>                        80/TCP                48s
  6. tomcat-service                ClusterIP                None                                <none>                        8080/TCP        48s
复造代码
5.2 Http代办署理

创立ingress-http.yaml
  1. apiVersion: extensions/v1beta1
  2. kind: Ingress
  3. metadata:  
  4.   name: ingress-http  
  5.   namespace: dev
  6. spec:  
  7.   rules:  
  8.   - host: nginx.itheima.com   
  9.     http:      
  10.       paths:      
  11.       - path: /        
  12.         backend:         
  13.           serviceName: nginx-service         
  14.           servicePort: 80  
  15.   - host: tomcat.itheima.com   
  16.     http:      
  17.     paths:      
  18.     - path: /        
  19.       backend:         
  20.       serviceName: tomcat-service         
  21.       servicePort: 8080
复造代码
  1. # 创立
  2. [root@master ~]# kubectl create -f ingress-http.yaml
  3. ingress.extensions/ingress-http created
  4. # 检察
  5. [root@master ~]# kubectl get ing ingress-http -n dev
  6. NAME                        HOSTS                                                                ADDRESS                        PORTS                AGE
  7. ingress-http        nginx.itheima.com,tomcat.itheima.com                                80                        22s
  8. # 检察详情
  9. [root@master ~]# kubectl describe ing ingress-http -n dev
  10. ...
  11. Rules:
  12. Host                                Path        backends
  13. ----                                ----        --------
  14. nginx.itheima.com        /                nginx-service:80(10.244.1.96:80,10.244.1.97:80,10.244.2.112.80)
  15. tomcat.itheima.com        /                tomcat-service:8080(10.244.1.94:8080,10.244.1.95:8080,10.244.2.111.8080)
  16. # 接下去,正在当地电脑设置host文件,剖析上里的两个域名到192.168.109.100(master)上
  17. # 然后,就能够别离会见tomcat.itheima.com:32240 战nginx.itheima.com:32240 检察结果了
复造代码
5.3 Https代办署理

创立证书
  1. # 天生证书
  2. openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=BJ/L=BJ/0=nginx/CN=itheima.com"
  3. # 创立稀钥
  4. kubectl create secret tls tls-secret --key tls.key --cert tls.crt
复造代码
创立ingress-https.yaml
  1. apiVersion: extensions/v1beta1
  2. kind: Ingress
  3. metadata:
  4.   name: ingress-https
  5.   namespace: dev
  6. spec:
  7.   tls:
  8.     - hosts:
  9.       - nginx.itheima.com
  10.       - tomcat.itheima.com
  11.       secretName: tls-secret # 指定秘钥
  12.   rules:
  13.   - host: nginx.itheima.com
  14.     http:
  15.       paths:
  16.       - path: /
  17.         backend:
  18.           serviceName: nginx-service
  19.           servicePort: 80
  20.   - host: tomcat.itheima.com
  21.     http:
  22.       paths:
  23.       - path: /
  24.         backend:
  25.           serviceName: tomcat-service
  26.           servicePort: 8080
复造代码
  1. # 创立
  2. [root@master ~]# kubectl create -f ingress-https.yaml
  3. ingress.extensions/ingress-https created
  4. # 检察
  5. [root@master ~]# kubectl get ing ingress-https -n dev
  6. NAME                        HOSTS                                                                        ADDRESS                        PORTS        AGE
  7. ingress-https        nginx.itheima.com,tomcat.itheima.com        10.104.184.38        80, 443        2m42s
  8. # 检察详情
  9. [root@master ~]# kubectl describe ing ingress-https -n dev
  10. ...
  11. TLS:
  12.   tls-secret terminates nginx.itheima.com,tomcat.itheima.com
  13. Rules:
  14. Host                                Path        backends
  15. ----                                ----        --------
  16. nginx.itheima.com        /                nginx-service:80(10.244.1.97:80,10.244.1.98:80,10.244.2.119.80)
  17. tomcat.itheima.com        /                tomcat-service:8080(10.244.1.99:8080,10.244.2.117:8080,10.244.2.120.8080)
  18. # 上面能够经由过程阅读器会见https://nginx.itheima.com:31335 战 https://tomcat.itheima.com:31335去检察了
复造代码
免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则