如何做建筑一体化的网站,百度在成都有分公司吗,如何做微信网站,建设公司网站应有哪些功能文章目录 一、网络相关资源介绍二、开启ipvs三、nginx网络示例四、pod之间的访问示例五、service反向代理示例 一、网络相关资源介绍 Servcie介绍 Service是对一组提供相同功能的Pods的抽象#xff0c;并为它们提供一个统一的入口。借助Service#xff0c;应用可以方便的实现… 文章目录 一、网络相关资源介绍二、开启ipvs三、nginx网络示例四、pod之间的访问示例五、service反向代理示例 一、网络相关资源介绍 Servcie介绍 Service是对一组提供相同功能的Pods的抽象并为它们提供一个统一的入口。借助Service应用可以方便的实现服务发现与负载均衡并实现应用的零宕机升级。Service通过标签来选取服务后端一般配合Replication Controller或者Deployment来保证后端容器的正常运行。这些匹配标签的Pod IP和端口列表组成endpoints由kubeproxy负责将服务IP负载均衡到这些endpoints上。即service不会直接到podservice是直接到endpoint资源就是地址加端口再由endpoint再关联到pod。 Endpoint介绍 Endpoint主要记录了每个pod的IP地址信息当Pod的IP发生变化时endpoints会进行更新。当我们创建Service的时候会自动生成一个Endpoint。 Service的四种类型 ClusterIP默认类型自动分配一个仅cluster内部可以访问的虚拟IP NodePort通过每个 Node 上的 IP 和静态端口NodePort暴露服务以便外部可以通过端口访问到该服务。 如果不指定会随机指定端口端口范围:30000~32767端口范围配置在/usr/lib/systemd/system/kube-apiserver.service文件中 LoadBalancer使用云提供商的负载均衡器可以向外部暴露服务。外部的负载均衡器可以路由到 NodePort 服务和 ClusterIP 服务。 ExternalName将服务通过DNS CNAME记录方式转发到指定的域名通过 spec.externlName 设定 。需要kube-dns版本在1.7以上。 kube-proxy Service在很多情况下只是一个概念真正起作用的其实是kube-proxy服务进程每个Node节点上都运行着一个kube-proxy服务进程。当创建Service的时候会通过api-server向etcd写入创建的service的信息而kube-proxy会基于监听的机制发现这种Service的变动然后它会将最新的Service信息转换成对应的访问规则 kube-proxy目前支持三种工作模式: userspace userspace模式下kube-proxy会为每一个Service创建一个监听端口发向Cluster IP的请求被Iptables规则重定向到kube-proxy监听的端口上kube-proxy根据LB算法选择一个提供服务的Pod并和其建立链接以将请求转发到Pod上。 该模式下kube-proxy充当了一个四层负责均衡器的角色。由于kube-proxy运行在userspace中在进行转发处理时会增加内核和用户空间之间的数据拷贝虽然比较稳定但是效率比较低。iptablesiptables模式下kube-proxy为service后端的每个Pod创建对应的iptables规则直接将发向Cluster IP的请求重定向到一个Pod IP。 该模式下kube-proxy不承担四层负责均衡器的角色只负责创建iptables规则。该模式的优点是较userspace模式效率更高但不能提供灵活的LB策略当后端Pod不可用时也无法进行重试。ipvs 模式(推荐)ipvs模式和iptables类似kube-proxy监控Pod的变化并创建相应的ipvs规则。ipvs相对iptables转发效率更高。除此以外ipvs支持更多的LB算法。
二、开启ipvs
psmaster节点操作 查看未开启状态ipvsadm -Ln 在Master节点修改将mode: 修改为mode: “ipvs”kubectl edit -n kube-system cm kube-proxy 查看kube-system命名空间下的kube-proxykubectl get pod -n kube-system 删除kubectl get pod -n kube-system |grep kube-proxy |awk ‘{system(“kubectl delete pod “$1” -n kube-system”)}’ 删除后k8s会自动再次生成新生成的kube-proxy会采用刚刚配置的ipvs模式再次查看kubectl get pod -n kube-system 查看启动方式 kubectl get pod -n kube-system | grep kube-proxy
kubectl logs -n kube-system kube-proxy-4c5xj再次查看ipvsadm -Ln
三、nginx网络示例
psmaster节点操作 部署kubectl create deployment nginx --imagenginx 查看状态watch -n 3 kubectl get pods -A 本机访问 1查看默认生成的ClusterIPkubectl get pod -o wide 2访问curl 192.169.189.110 3查看路由route -n 4查看192.168.248.12服务器的路由 5每个节点都会记录相应的CIN生成的IP并且也会记录对应的源IP作为互联网关口。如上所见我们在worker2192.168.248.12部署了pod当我们访问189.*的时候会跳转到worker2192.168.248.12网关。所以当我们访问 192.169.189.110时实际上访问的是192.168.248.12上的nginx。 创建供外部访问的ip和端口NodePortkubectl expose deployment nginx --port80 --typeNodePort ps在最新的 Kubernetes 版本中kubectl expose 不再支持 --node-port 参数来指定 NodePort 端口。如果需要指定端口则需要编写yaml文件生成。 查看端口kubectl get pods,svc 访问nginx页面http://192.168.248.11:30579
四、pod之间的访问示例 pod之间的网络访问推荐通过service name进行访问 创建busybox的pod并且进入 kubectl run -it --image busybox:1.28.4 dns-test --restartNever --rm /bin/sh psbusybox是一个聚成了一百多个最常用linux命令和工具的软件工具箱它在单一的可执行文件中提供了精简的Unix工具集便于测试。 访问nginxwget http://nginx 跨空间访问其他的service加上.空间名 wget http://nginx.default
五、service反向代理示例 反向代理外部ip创建service并且自定义endpoints 1编写service.yamlvi /opt/edsvc.yaml ps不指定空间的默认default空间 apiVersion: v1
kind: Service
metadata:name: nginx-svc-external labels:app: nginx
spec:ports: - port: 80 targetPort: 80name: web type: ClusterIP 解释 apiVersion: v1
kind: Service #资源类型为Service
metadata:name: nginx-svc-external # Service 名字labels:app: nginx # Service 自己本身的标签
spec:ports: #端口映射- port: 80 #service自己的端口在使用内网ip访间时使用targetPort: 80 #目标pod的端口name: nginx-web #为端口起个名字type: ClusterIP #主随机启动一个瑞口(3080-32767》映射到ports 中的踏口该端口是直接掷定在node 上的且集群中的每一个node都会绑定这个端口#也可以用于将服务暴露给外部访问但是这种方式实际生产环境不推荐效率较低而且 Service 是四层负载2编写endpoints.yamlvi /opt/endpoints.yaml apiVersion: v1
kind: Endpoints
metadata:labels:app: nginx name: nginx-svc-external namespace: default
subsets:
- addresses:- ip: 120.78.159.117 ports: - name: nginx-webport: 80protocol: TCP解释 apiVersion: v1
kind: Endpoints
metadata:labels:app: nginx # 与service一致name: nginx-svc-external #与service一致namespace: default #与service一致
subsets:
- addresses:- ip: 120.78.159.117 #目标ip 地址ports: #与service一致- name: webport: 80protocol: TCP3创建资源 kubectl apply -f /opt/edsvc.yaml
kubectl apply -f /opt/endpoints.yaml4查看代理地址kubectl get ep 4测试访问kubectl run -it --image busybox:1.28.4 dns-test --restartNever --rm /bin/sh -- wget http://nginx-svc-external ps可以看到路径转发到外网ip去了 反向代理外部域名 1创建资源vi /opt/baidusvc.yaml apiVersion: v1
kind: Service
metadata:labels:app: wolfcode-external-domainname: wolfcode-external-domain
spec:type: ExternalName externalName: www.wolfcode.cn2创建资源kubectl apply -f /opt/baidusvc.yaml 3查看svckubectl get svc 4测试访问kubectl run -it --image busybox:1.28.4 dns-test --restartNever --rm /bin/sh -- wget wolfcode-external-domain