9、对外暴露服务
参考:详解kubernetes五种暴露服务的方式 - 滴滴滴 - 博客园
前面只介绍了Nodeport方式,还有NodePort、LoadBalancer、ExternalName、Ingress方式,重点讲解Ingress方式。
nginx-ingress:GitHub - kubernetes/ingress-nginx: Ingress NGINX Controller for Kubernetes,,,官网显示最低支持要求k8s版本是1.24, 1.23, 1.22, 1.21, 1.20,
我们从其他网友捞到一个版本,如下,
下载地址:https://gitcode.com/gh_mirrors/in/ingress-nginx/tags/nginx-0.26.0
下载安装包:https://raw.gitcode.com/gh_mirrors/in/ingress-nginx/archive/refs/heads/nginx-0.26.0.tar.gz (需要在下载页面登录,否则wget下载后是空的..)
解压之后:
[root@k8s-master1 ingress]# tar -xf ingress-nginx-nginx-0.26.0.tar.gz [root@k8s-master1 ingress]# cd /root/ingress/ingress-nginx-nginx-0.26.0/deploy/static [root@k8s-master1 static]# ls configmap.yaml mandatory.yaml namespace.yaml provider rbac.yaml with-rbac.yaml [root@k8s-master1 static]# for i in `ls *.yaml`;do kubectl apply -f $i;done ... clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-clusterrole-nisa-binding unchanged deployment.apps/nginx-ingress-controller unchanged
[root@k8s-master1 static]# kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
nginx-ingress-controller-56b4657db-q8jz5 1/1 Running 0 6m49s
[root@k8s-master1 static]# kubectl get deploy -n ingress-nginx
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-ingress-controller 1/1 1 1 6m58s
[root@k8s-master1 static]# kubectl get ing -n ingress-nginx
No resources found.
[root@k8s-master1 static]# kubectl get svc -n ingress-nginx
No resources found.
如上,已经生成了ingress-nginx命令空间,controller deploy组件,并不存在service。注意:服务是service模式才支持,其他模式不支持使用ingress
部署ingress controller service服务,直接使用上面的yaml文件,因为需要固定端口出来,所以我们暴露出来新增了标黄的固定端口信息。
[root@k8s-master1 static]# cat provider/baremetal/service-nodeport.yaml ... protocol: TCP nodePort: 30080 - name: https port: 443 targetPort: 443 protocol: TCP nodePort: 30443 selector: ...
[root@k8s-master1 static]# kubectl apply -f provider/baremetal/service-nodeport.yaml
service/ingress-nginx created
[root@k8s-master1 static]# kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx NodePort 10.101.9.135 <none> 80:30080/TCP,443:30443/TCP 11s
访问验证:测试对外服务ingress-controller service是否运行成功,如上,查看错误信息为404,出现nginx提示,表示成功部署,运行正常。
自此,ingress nginx服务已部署完成,我们现在可以部署服务上去了。
[root@k8s-master1 ~]# kubectl create deploy myappv1dep --image=swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/wangyanglinux/myapp:v1 -n devs [root@k8s-master1 ~]# kubectl get pods -l app=myappv1dep -owide -n devs NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES myappv1dep-67f8685884-s2q7l 1/1 Running 0 100s 192.168.169.155 k8s-node2 <none> <none> [root@k8s-master1 ~]# kubectl expose deploy myappv1dep --name=myappv1depsvc --port=80 -n devs service/myappv1depsvc exposed [root@k8s-master1 ~]# kubectl get svc myappv1depsvc -owide -n devs NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR myappv1depsvc ClusterIP 10.108.175.197 <none> 80/TCP 4s app=myappv1dep
如下,后端通过pod、svc服务都可以正常访问。
配置文件myappv1deping.yaml如下,注意标红部分,test.myappv1.com不行会报503错误,test.myappv.com和test.myappv1c.com可以正常使用,不要问为什么,都是踩出来的坑。
[root@k8s-master1 ingress]# cat myappv1deping.yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: myappv1depsvc-ing namespace: devs spec: rules: - host: test.myappv1c.com http: paths: - path: / backend: serviceName: myappv1depsvc servicePort: 80
[root@k8s-master1 ingress]# kubectl apply -f myappv1deping.yaml
[root@k8s-master1 ingress]# kubectl -n devs get ing myappv1depsvc-ing NAME HOSTS ADDRESS PORTS AGE myappv1depsvc-ing test.myappv1c.com 10.101.9.135 80 11m [root@k8s-master1 ingress]# curl 10.101.9.135 -H 'host: test.myappv1c.com' Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a> [root@k8s-master1 ingress]# curl 192.168.1.135:30080 -H 'host: test.myappv1c.com' Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
如上,nginx ingress service服务已经正常使用。下面我们多加一个服务试试。
[root@k8s-master1 ingress]# cat myappv1deping.yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: myappv1depsvc-ing namespace: devs spec: rules: - host: test.myappv1c.com http: paths: - path: / backend: serviceName: myappv1depsvc servicePort: 80 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: myapptesvc-ing namespace: devs spec: rules: - host: test.myapptest.com http: paths: - path: / backend: serviceName: myapptesvc servicePort: 80myappv1deping.yaml
[root@k8s-master1 ingress]# curl 192.168.1.135:30080 -H 'host: test.myapptest.com' # curl验证也是正常的。
可见ingress是通过域名来区分不同服务,因此我们可以配置hosts文件来实现访问。
[root@k8s-master1 ingress]# grep test /etc/hosts
192.168.1.135 node2.k8s.io k8s-node2 test.myappv1c.com test.myapptest.com
[root@k8s-master1 ingress]# curl test.myappv1c.com:30080
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
自此,ingress nginx 配置完成。
===
尝试下traefix ingress使用
版本选择参考:Kubernetes | Traefik | v1.7
已完成:https://www.cnblogs.com/sunnyyangwang/p/18634327
10、affinity亲和性与反亲和性
node、pod层面
11、污点和容忍度
节点亲和性 是 Pod 的一种属性,它使 Pod 被吸引到一类特定的节点 (这可能出于一种偏好,也可能是硬性要求)。 污点(Taint) 则相反——它使节点能够排斥一类特定的 Pod。
容忍度(Toleration) 是应用于 Pod 上的。容忍度允许调度器调度带有对应污点的 Pod。 容忍度允许调度但并不保证调度:作为其功能的一部分, 调度器也会评估其他参数。
污点和容忍度(Toleration)相互配合,可以用来避免 Pod 被分配到不合适的节点上。 每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的 Pod, 是不会被该节点接受的。
标签:master1,kubectl,ingress,root,nginx,com,命令行,k8s,快速 From: https://www.cnblogs.com/sunnyyangwang/p/18574654