kubectl 命令行快速操作-2

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: 80
myappv1deping.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, 是不会被该节点接受的。

 

posted @   wang_wei123  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示