一文看懂 Kubernetes 服务发现: Service
Service 简介
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web_server
template:
metadata:
labels:
app: web_server
spec:
containers:
- name: httpd-demo
image: httpd
- apiVersion: 创建资源的 api 版本,这里是 apps/v1。
- kind: 创建的资源类型为 Deployment。
- metadata.name: 创建的 Deployment 名字。
- replicas: 资源 Deployment 包括三个 Pods 副本。
- matchLabels: 匹配到对应的 Pod 标签。
- labels: 副本 Pod 的标签。
- containers: Pod 内的 container,它是实际提供微服务的单元。
apiVersion: v1
kind: Service
metadata:
name: httpd-svc
spec:
selector:
app: web_server
ports:
- protocol: TCP
port: 8080
targetPort: 80
## 创建 Deployment
$ kubectl apply -f deployment-test.yaml
deployment.apps/bootcamp-deployment created
$ kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
bootcamp-deployment 3/3 3 3 2m5s
$ kubectl get replicasets.apps
NAME DESIRED CURRENT READY AGE
bootcamp-deployment-f94bcd74c 3 3 3 2m16s
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
bootcamp-deployment-f94bcd74c-k4mrc 1/1 Running 0 3m17s 172.18.0.5 minikube <none> <none>
bootcamp-deployment-f94bcd74c-q2x6c 1/1 Running 0 3m17s 172.18.0.6 minikube <none> <none>
bootcamp-deployment-f94bcd74c-wwcqx 1/1 Running 0 3m17s 172.18.0.4 minikube <none> <none> ## 创建 Service
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
httpd-svc ClusterIP 10.108.52.85 <none> 8080/TCP 41s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10m ## frontend pod
$ kubectl run kubernetes-bootcamp --image=docker.io/jocatalin/kubernetes-bootcamp:v1 --port=8080 --labels="app=bootcamp"
deployment.apps/kubernetes-bootcamp created
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
bootcamp-deployment-f94bcd74c-k4mrc 1/1 Running 0 6m53s 172.18.0.5 minikube <none> <none>
bootcamp-deployment-f94bcd74c-q2x6c 1/1 Running 0 6m53s 172.18.0.6 minikube <none> <none>
bootcamp-deployment-f94bcd74c-wwcqx 1/1 Running 0 6m53s 172.18.0.4 minikube <none> <none>
kubernetes-bootcamp-9966c6d5-qpr9w 1/1 Running 0 14s 172.18.0.7 minikube <none> <none>
$ curl 172.18.0.5:8080
Hello Kubernetes bootcamp! | Running on: bootcamp-deployment-f94bcd74c-k4mrc | v=1 $ curl 10.108.52.85:8080
Hello Kubernetes bootcamp! | Running on: bootcamp-deployment-f94bcd74c-k4mrc | v=1
$ curl 10.108.52.85:8080
Hello Kubernetes bootcamp! | Running on: bootcamp-deployment-f94bcd74c-q2x6c | v=1
$ curl 10.108.52.85:8080
Hello Kubernetes bootcamp! | Running on: bootcamp-deployment-f94bcd74c-wwcqx | v=1
$ kubectl exec -it kubernetes-bootcamp-9966c6d5-qpr9w /bin/bash
root@kubernetes-bootcamp-9966c6d5-qpr9w:/# curl 172.18.0.5:8080
Hello Kubernetes bootcamp! | Running on: bootcamp-deployment-f94bcd74c-k4mrc | v=1 root@kubernetes-bootcamp-9966c6d5-qpr9w:/# curl 10.108.52.85:8080
Hello Kubernetes bootcamp! | Running on: bootcamp-deployment-f94bcd74c-k4mrc | v=1
root@kubernetes-bootcamp-9966c6d5-qpr9w:/# curl 10.108.52.85:8080
Hello Kubernetes bootcamp! | Running on: bootcamp-deployment-f94bcd74c-q2x6c | v=1
root@kubernetes-bootcamp-9966c6d5-qpr9w:/# curl 10.108.52.85:8080
Hello Kubernetes bootcamp! | Running on: bootcamp-deployment-f94bcd74c-wwcqx | v=1
$ kubectl expose deployment/bootcamp-deployment --type="NodePort" --port 8080
service/bootcamp-deployment exposed $ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
bootcamp-deployment NodePort 10.107.172.165 <none> 8080:32150/TCP 5s
httpd-svc ClusterIP 10.108.52.85 <none> 8080/TCP 36m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 46m $ kubectl describe service bootcamp-deployment
Name: bootcamp-deployment
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=web_server
Type: NodePort
IP: 10.107.172.165
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 32150/TCP
Endpoints: 172.18.0.4:8080,172.18.0.5:8080,172.18.0.6:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
$ netstat -antp | grep 32150
tcp6 0 0 :::32150 :::* LISTEN 4651/kube-proxy $ ps aux | grep 4651 | grep -v grep
root 4651 0.0 1.2 140108 31048 ? Ssl 07:15 0:01 /usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf --hostname-override=minikube
$ curl 172.17.0.72:32150
Hello Kubernetes bootcamp! | Running on: bootcamp-deployment-f94bcd74c-q2x6c | v=1
$ curl 172.17.0.72:32150
Hello Kubernetes bootcamp! | Running on: bootcamp-deployment-f94bcd74c-k4mrc | v=1
$ kubectl get pods --namespace=kube-system | grep kube-proxy
kube-proxy-gk8zm 1/1 Running 0 37s
- KUBE-SERVICES:操作跳转规则的主要链。
- KUBE-NODEPORTS:通过 nodeport 访问的流量经过的链。
- KUBE-POSTROUTING:post 路由经过的链。
- KUBE-MARK-MASQ:对符合条件的 package set MARK0x4000,有此标记的数据包会在 KUBE-POSTROUTING 链中做 MASQUERADE。
- KUBE-MARK-DROP:对未能匹配到跳转规则的package set mark 0x8000,有该标记的包会在 filter 表中被 drop 掉。
-A KUBE-SERVICES -d 10.108.52.85/32 -p tcp -m comment --comment "default/httpd-svc: cluster IP" -m tcp --dport 8080 -j KUBE-SVC-RL3JAE4GN7VOGDGP
-A KUBE-SVC-RL3JAE4GN7VOGDGP -m statistic --mode random --probability 0.33333333349 -j KUBE-SEP-NGIJJXQTL6LQACUG
-A KUBE-SVC-RL3JAE4GN7VOGDGP -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-KSASEUT37GIWYDZK
-A KUBE-SVC-RL3JAE4GN7VOGDGP -j KUBE-SEP-TTP6SZ4CLZYRFEZJ
-A KUBE-SEP-NGIJJXQTL6LQACUG -s 172.18.0.4/32 -j KUBE-MARK-MASQ
-A KUBE-SEP-NGIJJXQTL6LQACUG -p tcp -m tcp -j DNAT --to-destination172.18.0.4:8080
-A KUBE-SERVICES -d 10.107.172.165/32 -p tcp -m comment --comment "default/bootcamp-deployment: cluster IP" -m tcp --dport 8080 -j KUBE-SVC-7BU2JDGBFZPRVB5H
-A KUBE-SVC-7BU2JDGBFZPRVB5H -m statistic --mode random --probability0.33333333349 -j KUBE-SEP-JRC46L5OEHUJ3JOG
-A KUBE-SVC-7BU2JDGBFZPRVB5H -m statistic --mode random --probability0.50000000000 -j KUBE-SEP-RVACF472KUDH2WI5
-A KUBE-SVC-7BU2JDGBFZPRVB5H -j KUBE-SEP-NHLSGKWGDK2BACCW
-A KUBE-SEP-JRC46L5OEHUJ3JOG -s 172.18.0.4/32 -j KUBE-MARK-MASQ
-A KUBE-SEP-JRC46L5OEHUJ3JOG -p tcp -m tcp -j DNAT --to-destination 172.18.0.4:8080
$ kubectl describe service httpd-svc
Name: httpd-svc
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"httpd-svc","namespace":"default"},"spec":{"ports":[{"port":8080,"...
Selector: app=web_server
Type: ClusterIP
IP: 10.108.52.85
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
Endpoints: 172.18.0.4:8080,172.18.0.5:8080,172.18.0.6:8080
Session Affinity: None
Events: <none>
apiVersion: v1
kind: Endpoints
metadata:
name: httpd-svc-endpoints
subsets:
- addresses:
- ip: 1.2.3.4
ports:
- port: 80
apiVersion: v1
kind: Service
metadata:
name: httpd-svc-endpoints
spec:
ports:
- protocol: TCP
port: 8080
targetPort: 80 [centos@k8s-master-node-1 hxia]$ kubectl describe services httpd-svc-endpoints
Name: httpd-svc-endpoints
Namespace: default
Labels: <none>
Annotations: <none>
Selector: <none>
Type: ClusterIP
IP: 10.102.65.186
Port: <unset> 8080/TCP
TargetPort: 80/TCP
Endpoints: 1.2.3.4:80
Session Affinity: None
Events: <none>
$ curl minikube:32150
Hello Kubernetes bootcamp! | Running on: bootcamp-deployment-f94bcd74c-q2x6c | v=1
$ curl minikube:32150
Hello Kubernetes bootcamp! | Running on: bootcamp-deployment-f94bcd74c-wwcqx | v=1 $ kubectl get pods --namespace=kube-system -o wide | grep dns
coredns-6955765f44-rb828 1/1 Running 0 24m 172.18.0.3 minikube <none> <none>
coredns-6955765f44-rm4pv 1/1 Running 0 24m 172.18.0.2 minikube <none> <none>
一文看懂 Kubernetes 服务发现: Service的更多相关文章
- 一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系
我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难.有意思的是Web服务器/Web容器/Web应用程序服务器/反向代理有点像四胞胎,在网络上经常一起出现.本文将带读者对这四个相似概念如何区分. 1 ...
- Docker Kubernetes 服务发现原理详解
Docker Kubernetes 服务发现原理详解 服务发现支持Service环境变量和DNS两种模式: 一.环境变量 (默认) 当一个Pod运行到Node,kubelet会为每个容器添加一组环境 ...
- [转帖]一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系
一文看懂web服务器.应用服务器.web容器.反向代理服务器区别与联系 https://www.cnblogs.com/vipyoumay/p/7455431.html 我们知道,不同肤色的人外貌差别 ...
- [转帖] 一文看懂:"边缘计算"究竟是什么?为何潜力无限?
一文看懂:"边缘计算"究竟是什么?为何潜力无限? 转载cnbeta 云计算 雾计算 边缘计算... 知名创投调研机构CB Insights撰文详述了边缘计算的发展和应用前景 ...
- Nature 为引,一文看懂个体化肿瘤疫苗前世今生
进入2017年,当红辣子鸡PD-1疗法,一路横扫多个适应症.而CAR-T治疗的“小车”在获得FDA专委会推荐后也已经走上高速路,成为免疫治疗又一里程碑事件.PD-1.CAR-T之后,下一个免疫治疗产品 ...
- 一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了
一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了 转载: 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它 ...
- 转载来自朱小厮博客的 一文看懂Kafka消息格式的演变
转载来自朱小厮博客的 一文看懂Kafka消息格式的演变 ✎摘要 对于一个成熟的消息中间件而言,消息格式不仅关系到功能维度的扩展,还牵涉到性能维度的优化.随着Kafka的迅猛发展,其消息格式也在 ...
- Kubernetes服务发现入门:如何高效管理服务?
愈发复杂的应用程序正在依靠微服务来保持可扩展性和提升效率.Kubernetes为微服务提供了完美的环境,并能够让其与Kubernetes的工具组件和功能兼容.当应用程序的每个部分放置在一个容器中,整个 ...
- 【转帖】一文看懂docker容器技术架构及其中的各个模块
一文看懂docker容器技术架构及其中的各个模块 原创 波波说运维 2019-09-29 00:01:00 https://www.toutiao.com/a6740234030798602763/ ...
随机推荐
- 双数组字典树(Double Array Trie)
参考文献 1.双数组字典树(DATrie)详解及实现 2.小白详解Trie树 3.论文<基于双数组Trie树算法的字典改进和实现> DAT的基本内容介绍这里就不展开说了,从Trie过来的同 ...
- ssh2中的添,删,查,改。
1.spring封装的HibernateTemplate类的一些操作方法. 2.session提供的根据主键ID进行添.删.查.改的基本方法. 由session得到的hql语句 由session得到的 ...
- mysql 数据库存储路径更改
使用了VPS一段时间之后发现磁盘空间快满了.本人的VPS在购买的时候买了500gb的磁盘,提供商赠送了20GB的高性能系统磁盘.这样系统就有两个磁盘空间了.在初次安装mysql 的时候将数据库目录安装 ...
- RedisEclipse
1.Eclipse配置 2.HelloWorld import redis.clients.jedis.Jedis; public class TestPing { public static voi ...
- 攻防世界-PHP文件包含
<?php show_source(__FILE__); echo $_GET['hello']; $page=$_GET['page']; while (strstr($page, " ...
- 常见的名片尺寸如何在CorelDRAW预设
说到名片想必大家肯定不陌生,是我们生活中随处可见的物品,也是商家宣传必不可少的印刷物料.那么名片的尺寸是多少?我们做名片的时候该如何把握好名片的尺寸呢?在CDR中有专门的名片尺寸,下面小编就为大家简单 ...
- Edison:FL Studio中的常用音频录制与剪辑插件
Edison是FL Studio中的一个完全集成的音频编辑和录制工具.Edison加载到效果插槽(在任何调音台音轨中),然后录制或播放该位置的音频.您可以在任意数量的混音器轨道或效果插槽中根据需要加载 ...
- iOS 搜索条使用详解
在ios开发中搜索条的使用挺常见的,不过之前一直没用到也没细细研究,最近做外包项目的时候刚好用到,在这里记录一下使用的过程,只要理解了原理,其实还是比较简单的!上传的图片有点大,刚好可以看清楚它的使用 ...
- Contest 984
A 先手取最大,后手取最小,答案就是第 \(\left\lceil\frac{n}{2}\right\rceil\) 小的数. 用 nth_element 可以做到 \(O\left(n\right) ...
- Java基础教程——使用Eclipse快速编写Java输入输出代码
Eclipse安装 IDE:Integrated Development Environment,集成开发环境.好比是全自动洗衣机. 此处使用[eclipse-jee-4.6-neon-3-win32 ...