Kubernetes
kubernetes集群中,pod是多变的,可以被新建或删除,而且ip不稳定,不方便集群外部访问,所以提供了一种新的资源 Service ,就是就是 a set of Pod ,作用是提供一个稳定的IP,给集群外访问。
本文所需要的 ingress-controller 的 mandatory.yaml 文件 : https://www.syjshare.com/res/6BFS49US
本文所有涉及的Service的两种部署方式(NodePort和ClusterIP) yaml 文件:https://www.syjshare.com/res/ZLYV4RE7
Service暴露服务的方式一共有四种,如下:
ClusterIP:通过集群的内部 IP 暴露服务,选择该值时服务只能够在集群内部访问。 这也是默认的 ServiceType。
NodePort:通过每个节点上的 IP 和静态端口(NodePort)暴露服务。 NodePort 服务会路由到自动创建的 ClusterIP 服务。 通过请求 <节点 IP>:<节点端口>,你可以从集群的外部访问一个 NodePort 服务。
LoadBalancer:使用云提供商的负载均衡器向外部暴露服务。 外部负载均衡器可以将流量路由到自动创建的 NodePort 服务和 ClusterIP 服务上。
ExternalName:通过返回 CNAME 和对应值,可以将服务映射到 externalName 字段的内容(例如,foo.bar.example.com)。 无需创建任何类型代理。
其中,最常见的两种是 ClusterIP 和 NodePort ,本文实践这种两种方式。
当我们需要开始做一件事情的时候,最好重新建一个命名空间,这样不干扰之前的,如下:
# 切换命名空间kubectl config set-context $(kubectl config current-context) --namespace=myns
Service
apiVersion: apps/v1kind: Deploymentmetadata: name: whoami-deployment labels: app: whoamispec: replicas: 3 selector: matchLabels: app: whoami template: metadata: labels: app: whoami spec: containers: - name: whoami image: jwilder/whoami ports: - containerPort: 8000---apiVersion: v1kind: Servicemetadata: name: whoami-servicespec: ports: - port: 81 # 默认就是访问80端口 curl serviceIp 就好 protocol: TCP targetPort: 8000 # 映射到targetPort为8000 就是上面pod那个 selector: app: whoami # selector 匹配上模板上的 label
要搞清楚pod-service的关联关系
pod使用的是jwilder/whoami镜像,这个是公开的镜像,没问题
pod和service通过 label-selector 关联起来,pod中定义 app: whoami 这个标签 ,然后servie中通过 selector: app: whoami 这个选择器找到这个标签,selector-label 标签选择器绑定完成之后,就是端口绑定,然后 service 使用的是 80 端口映射到所绑定的pod的8000的端口,就是访问 service 的 80 端口,就是访问 pod 的 8000 端口。
要搞清楚pod的ip地址 service的ip地址 宿主机的ip地址的关联关系
ingress 和 ingress-controller 是两个不同东西,是两个不同的配置文件
ingress -> ingress-controller -> service -> pod
kubectl label node m name=ingress kubectl apply -f mandatory.yaml kubectl get all -n ingress-nginx
mandatory.yaml 这个yaml文件太大了,不好放在博客里面,读者可以从 https://www.syjshare.com/res/6BFS49US 下载获得。
另外,注意这个 ingress-controller 使用HostPort方式运行 ,所以 mandatory.yaml 文件中有 这句。
创建tomcat的pod和service
vi tomcat.yamlkubectl apply -f tomcat.yamlkubectl get svc kubectl get pods
apiVersion: apps/v1kind: Deploymentmetadata: name: tomcat-deployment labels: app: tomcatspec: replicas: 1 selector: matchLabels: app: tomcat template: metadata: labels: app: tomcat spec: containers: - name: tomcat image: tomcat ports: - containerPort: 8080---apiVersion: v1kind: Servicemetadata: name: tomcat-servicespec: ports: - port: 80 protocol: TCP targetPort: 8080 selector: app: tomcat
创建Ingress以及定义转发规则
kubectl apply -f nginx-ingress.yamlkubectl get ingresskubectl describe ingress nginx-ingress
#ingress 这个就是extensions/v1beta1,不要修改 apiVersion: extensions/v1beta1kind: Ingressmetadata: name: nginx-ingressspec: rules: - host: tomcat.jack.com http: paths: - path: / backend: serviceName: tomcat-service servicePort: 80
chrome浏览器访问这个就好了
apiVersion: apps/v1kind: Deploymentmetadata: name: whoami-deployment labels: app: whoamispec: replicas: 3 selector: matchLabels: app: whoami template: metadata: labels: app: whoami spec: containers: - name: whoami image: jwilder/whoami ports: - containerPort: 8000---apiVersion: v1kind: Servicemetadata: name: whoami-servicespec: ports: - port: 81 # 默认就是访问80端口 curl serviceIp 就好 protocol: TCP targetPort: 8000 # 映射到targetPort为8000 就是上面pod那个 selector: app: whoami # selector 匹配上模板上的 label
成功
Service暴露的两种方式,完成了。
ClusterIP 直译就是集群内ip,所以就是 不暴露外部端口,是默认方式;
NodePort 直译就是节点端口,所以就是 虚拟机/宿主机的端口,就是暴露外部端口。
一般来说,Cluster IP是默认的服务类型,所以使用这种更好,但是比较复杂,需要配置 ingress 和 ingress-controlller ,将 ingress 作为入口。
天天打码,天天进步!!
举报/反馈
上一篇:开车到啥程度才能自称老司机?这4个技巧不会,再开10年也是新手
下一篇:一次意外怀孕,让我彻底看清男人:这样的男友靠得住吗?
最近更新影视资讯
- 韵府群玉
- 老年临终关怀护理集锦9篇
- 如何评价剧场版动画《和谐(harmony/ハーモニー)》原作:伊藤计划 ?
- 智人战胜尼人的决定性因素 是神灵崇拜与艺术品 在3万7千年前智人击败了远比自己强
- 沈阳参考消息(2017年1月11日)
- 密集架区密集架书库图书馆负一楼期刊阅览区中外文期刊图书馆一楼图书借阅区(A-H
- 费维光:脾胃病17方
- 土耳其身为伊斯兰国家,为什么允许“风俗产业”合法化?
- 高中教师教学反思
- 三观尽毁!90后公务员出轨50岁女上司,聊天言语暧昧,妻子怒举报
- 22应用心理学考研347 首师360有调剂院校吗?
- 铃木凉美女士,你仍期待同时收获怜爱与尊敬吗?
- 团建别墅 | 确认过眼神,是能疯一起的人!Boss,今年年会我们泡私家温
- 《归来》观后感
- 翻译伦理的重要性和译者荣辱观建设研究
- 高二语文期末考试测试题及答案
- 国医大师名单!在北京看中医该找谁,这下全知道!
- 这些年爱过的同人文(BG)
- 荷兰深陷风俗业?日本都要甘拜下风,为何能稳坐世界顶尖位置!
- 戴安娜25年前私密录像首次解密:自述性生活,全英国都被炸懵逼了
- 原创上官婉儿为什么必须死,她做的这件事太无耻,李隆基忍无可忍
- 「医药速读社」Paxlovid临床失败 礼来斥巨资引进Kv1.3抑制剂
- 她是韩国性感女神,靠出演“三级片”走红,今41岁韵味不减当年!
- 电影市场有望点燃 好莱坞大片排队上映
- 评荐《传染病(Contagion)》