006--Ubuntu使用K8S(kube-proxy)

004--Ubuntu使用K8S(kube-proxy)
1、参考网址:
git网址:https://github.com/liuyi01/kubernetes-starter/blob/master/docs/2-kubernetes-simple.md
2、说明
1、kube-proxy和kube-dns非常重要,基本上所有的集群都会使用
但是从技术角度讲,这两个是可选取组件
2、使用pod和deployment基本上可以完成集群的搭建使用,但是外部不可以访问
- 使用service,就安装kube-proxy
- 使用名称解析service,就安装kube-dns
3、kube-proxy安装在Node节点上
4、安装完kube-proxy后,我们就可以将deployment里面负载的pod,暴露端口给外部进行访问
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
5、此时查看services(此时kubernetes-bootcamp会添加在services上)
kubectl get services(只能在master上查询)
6、验证监听地址(只能在Node节点上验证,master并不监听这个端口)
netstat -ntlp | grep 39699
7、port对比说明
1、kubectl run --port=80(或者kubectl expose --port=80)
service在每一个Node上分配的port,即NodePort(clusterIP+nodePort可定位到具体Node上的pod)
2、kubectl expose --target-port 8080
在每一个pod上(pod内部的虚拟网络端口)
3、kubectl get services查看的时候还有一个port:nodePort 25433(可能是其他值,每一个service对应一个NodePort)
kube-proxy在Node上真实启动的端口去监听服务,可以通过这个端口访问服务(真实IP+随机port)
4、总结:
- 随机端口是用户最直接的访问端口,每一Node上都有一个,即NodePort(作用最大,浏览器可以访问的外部暴露端口,NodeIP:NodePort)
- port是多个Node节点给service提供统一访问端口,(作用中等,用户无感知,在集群中使用,clusterIP:port)
- targetPort是pod内部真实启动服务的端口(作用最小,可以随便定义,也可以让系统自己生成)
- service查询结果的意义:将集群中service请求分发到每一个Node上:clusterIP:port--> NodeIP:NodePort
- 所以在Node节点上查询,Node会对NodePort(随机IP)进行监听,因为要把clusterIP:port--> NodeIP:NodePort
- 作用类似于nginx,将service将request分发到指定的服务器上(clusterIP:port对应多个NodeIP:NodePort)
- 可以验证,curl clusterIP:port或者NodeIP:NodePort
curl 10.68.4.132:80 在Node节点上进行访问(master其实不是cluster,因为master只是nginx的作用,将request转发到Node上)
curl 192.168.221.138:25433 在所有节点上进行访问(真实的网络请求,也可以用浏览器访问,不会进行负载,直接访问)
- 通过curl可以知道:
1、浏览器只能访问192.168.221.138:25433、192.168.221.140:25433,不能访问master的ip:25433
2、pod创建之后,其实已经跑起来了,但只能通过kubectl proxy进行测试访问
3、service的创建,等于给pod提供了真实的调用接口
4、因为我们会在集群中调用,所以只暴露一个端口,但这个接口不能让外部访问,是clusterIP:port
5、service的创建,等于将pod开放给用户了,所以用户可以指定Node进行访问,是NodeIP:NodePort
6、类似于Nginx的功能其实就是kube-proxy的作用,因为master上没有,所以不能进行负载
7、那么问题来了,如何访问clusterIP:NodePort
- 1、在Node节点上查询docker运行的容器
docker ps | grep bootcamp
- 2、选择一个container进入
docker exec -it 71644a5389d9 /bin/bash
docker exec -it 71644a5389d9 /bash (上面的简写)
- 3、执行curl clusterIP:NodePort
curl 10.68.4.132:80
- 4、也可以执行pod的ip:port(kubectl get pods -o wide)
curl 172.20.33.134:80

8、运行deployment命令
    kubectl delete deployments/kubernetes-bootcamp
    kubectl run kubernetes-bootcamp --image=docker.io/jocatalin/kubernetes-bootcamp:v1 --port 80
    kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 80 --target-port 8080
    
9、删除deployment
    1、如果只删除deployment,service不会删除,pods会删除
    kubectl delete deployments/kubernetes-bootcamp
    2、如果删除service,不会影响deployment和pod(service是附加功能)
    kubectl delete service -l run=kubernetes-bootcamp

10、查询pod运行在哪个Node上
    #查询pod运行在哪个Node上
    kubectl get pods -o wide
    #查询pod使用的哪个端口,哪个IP(当前的IP是pod的虚拟IP:虚拟port)
    kubectl describe pods nginx-pod
    #然后curl调用测试
    curl ip:port
    
11、附加的查询命令
    #查看某个pod重启次数
    kubectl get pod nginx-pod --template="{{range .status.containerStatuses}}{{.name}}:{{.restartCount}}{{end}}"
    #查看某个pod生命周期
    kubectl get pod mysql --template="{{.status.phase}}"

12、创建service.yaml
    - #创建service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
    spec:
      ports:
      - port: 8080
        targetPort: 80
        nodePort: 20000
      selector:
        app: nginx
      type: NodePort
    - #运行service服务
    kubectl craete -f pod_service.yaml
    - #查看服务运行
    kubectl get services
    - #说明一点
    1、service本身是虚拟的东西,只是对pod进行分组而已
    2、并不会创建pod,但是暴露的时候会有clusterIP和nodePort
    3、curl clusterIP:nodePort(curl 192.168.221.138:20000)其实和我们刚才创建访问的是同样的pod

3、细节注意:
1、运行deployment的时候要加上--port 80,要不然在node内部没有办法进行访问,describe时没有端口,使用不了curl命令
2、对spec的理解:这是说明书,是面向未来的一种设计,所以要和相关组件同步使用,要不然会出问题(比如port的定义,要和deployment保持一致)
3、

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容