Kubernetes部署(九):CoreDNS、Dashboard、Ingress部署
admin
2023-04-09 16:03:40
0

相关内容:

Kubernetes部署(一):架构及功能说明
Kubernetes部署(二):系统环境初始化
Kubernetes部署(三):CA证书制作
Kubernetes部署(四):ETCD集群部署
Kubernetes部署(五):Haproxy、Keppalived部署
Kubernetes部署(六):Master节点部署
Kubernetes部署(七):Node节点部署
Kubernetes部署(八):Flannel网络部署
Kubernetes部署(九):CoreDNS、Dashboard、Ingress部署
Kubernetes部署(十):储存之glusterfs和heketi部署
Kubernetes部署(十一):管理之Helm和Rancher部署
Kubernetes部署(十二):helm部署harbor企业级镜像仓库

创建CoreDNS

  • kubernetes内部的服务发现以及pod之间的域名解析服务都是通过dns来实现,所以DNS对kubernets集群来说非常重要。目前dns有2种,一种是kube dns,一种是core dns,本次我们安装的是Coredns。

所有的软件及配置文件都保存在前面文章提到的百度网盘里 :百度共享链接在此文章里

[root@node-01 k8s]# kubectl create -f coredns/coredns.yaml 
serviceaccount/coredns created
clusterrole.rbac.authorization.k8s.io/system:coredns created
clusterrolebinding.rbac.authorization.k8s.io/system:coredns created
configmap/coredns created
deployment.extensions/coredns created
service/coredns created

[root@node-01 yaml]# kubectl get pod -n kube-system 
NAME                       READY     STATUS    RESTARTS   AGE
coredns-5f94b495b5-58t47   1/1       Running   0          6m
coredns-5f94b495b5-wvcsg   1/1       Running   0          6m

然后我们就可以随便进入一个pod,去ping域名看dns是否可以正常解析。

[root@node-01 yaml]# kubectl get pod
NAME                     READY     STATUS    RESTARTS   AGE
tomcat-7666b9764-mfgpb   1/1       Running   0          11h
[root@node-01 yaml]# kubectl exec -it tomcat-7666b9764-mfgpb -- /bin/sh
# ping baidu.com
PING baidu.com (220.181.57.216) 56(84) bytes of data.
64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=1 ttl=54 time=37.2 ms
64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=2 ttl=54 time=37.0 ms
64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=3 ttl=54 time=36.6 ms
64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=4 ttl=54 time=37.9 ms
^C
--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 36.629/37.230/37.958/0.498 ms

创建Dashboard

[root@node-01 yaml]# kubectl create -f dashboard/

[root@node-01 yaml]# kubectl cluster-info
Kubernetes master is running at https://10.31.90.200:6443
CoreDNS is running at https://10.31.90.200:6443/api/v1/namespaces/kube-system/services/coredns:dns/proxy
kubernetes-dashboard is running at https://10.31.90.200:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

访问Dashboard

https://10.31.90.200:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

用户名:admin 密码:admin 选择令牌模式登录。

获取Token

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

操作完以上步骤就可以看到dashboard了。
Kubernetes部署(九):CoreDNS、Dashboard、Ingress部署

Ingress部署

  • Kubernetes中,Service资源和Pod资源的IP地址仅能用于集群网络内部的通信,所有的网络流量都无法穿透边界路由器(Edge Router)以实 现集群内外通信。尽管可以为Service使用NodePort或LoadBalancer类型通过节点引入外部流量,但它依然是4层流量转发,可用的负载均衡器也 为传输层负载均衡机制。

  • Ingress是Kubernetes API的标准资源类型之一,它其实就是一组基于DNS名称(host)或URL路径把请求转发至指定的Service资源的规则, 用于将集群外部的请求流量转发至集群内部完成服务发布。然而,Ingress资源自身并不能进行“流量穿透”,它仅是一组路由规则的集合,这些 规则要想真正发挥作用还需要其他功能的辅助,如监听某套接字,然后根据这些规则的匹配机制路由请求流量。这种能够为Ingress资源监听套 接字并转发流量的组件称为Ingress控制器(Ingress Controller)。
    Kubernetes部署(九):CoreDNS、Dashboard、Ingress部署
  • Ingress控制器可以由任何具有反向代理(HTTP/HTTPS)功能的服务程序实现,如Nginx、Envoy、HAProxy、Vulcand和Traefik等。Ingress 控制器自身也是运行于集群中的Pod资源对象,它与被代理的运行为Pod资源的应用运行于同一网络中,如上图中ingress-nginx与pod1、pod3等 的关系所示。
  • 另一方面,使用Ingress资源进行流量分发时,Ingress控制器可基于某Ingress资源定义的规则将客户端的请求流量直接转发至与Service对应 的后端Pod资源之上,这种转发机制会绕过Service资源,从而省去了由kube-proxy实现的端口代理开销。如上图所示,Ingress规则需要由一个 Service资源对象辅助识别相关的所有Pod对象,但ingress-nginx控制器可经由api.ilinux.io规则的定义直接将请求流量调度至pod3或pod4,而无须 经由Service对象API的再次转发,WAP相关规则的作用方式与此类同。
  • 首先需要说明的是此次我们部署的是v0.21.0版本的ingress,在最新的v0.21.0版本历没有了default backend。
    Kubernetes部署(九):CoreDNS、Dashboard、Ingress部署

创建Ingress Controller

可以下载官方的mandatory.yaml到本地安装

[root@node-01 ingress]# kubectl create -f mandatory.yaml 

或者

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml

由于官方的ingress也只是一个pod并没有对外暴露IP和端口,所以我们需要为ingress创建一个对外暴露的service,暴露nodePort 20080和20443端口。对于想部署在生产环境的,可以单独拿2个node服务器来单独部署ingress controller,然后暴露80和443端口就可以了。

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: NodePort
  ports:
    - name: http
      nodePort: 20080
      port: 80
      targetPort: 80
      protocol: TCP
    - name: https
      nodePort: 20443
      port: 443
      targetPort: 443
      protocol: TCP
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

然后在haproxy的backend中加入3个node 的20080和20443端口,不明白我的网络架构的请看这里,然后将www.cnlinux.clubA记录解析到10.31.90.200

listen ingress-80
        bind 10.31.90.200:80
        mode tcp
        balance roundrobin
        timeout server 15s
        timeout connect 15s

        server apiserver01 10.31.90.204:20080 check port 20080 inter 5000 fall 5
        server apiserver02 10.31.90.205:20080 check port 20080 inter 5000 fall 5
        server apiserver03 10.31.90.206:20080 check port 20080 inter 5000 fall 5

listen ingress-443
        bind 10.31.90.200:443
        mode tcp
        balance roundrobin
        timeout server 15s
        timeout connect 15s

        server apiserver01 10.31.90.204:20443 check port 20443 inter 5000 fall 5
        server apiserver02 10.31.90.205:20443 check port 20443 inter 5000 fall 5
        server apiserver03 10.31.90.206:20443 check port 20443 inter 5000 fall 5

创建测试的tomcat demo

[root@node-01 yaml]# kubectl create -f tomcat-demo.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
  labels:
    app: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template: 
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat
spec:
  selector:
    app: tomcat
  ports:
  - name: tomcat
    protocol: TCP
    port: 8080
    targetPort: 8080
  type: ClusterIP 

创建ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - host: www.cnlinux.club
      http:
        paths:
          - path: 
            backend:
              serviceName: tomcat
              servicePort: 8080

至此ingress就已创建完成。在浏览器打开www.cnlinux.club 就可以看到tomcat的页面。
Kubernetes部署(九):CoreDNS、Dashboard、Ingress部署

后续会陆续更新所有的k8s相关文档,如果你觉得我写的不错,希望大家多多关注点赞,非常感谢!

相关内容

热门资讯

徐巧芯剖析赖清德:最怕自己丢掉... 海峡导报综合报道 大罢免投票一周年纪念活动26日举行,台北市长蒋万安出席并怒轰,民进党一年过后仍没有...
中国红十字会总会紧急向广东调拨... 记者从中国红十字会总会了解到,针对台风“红霞”给广东造成的灾情,中国红十字会总会启动四级应急响应,紧...
这些少年,正被“毒蛋”围猎 李梦抽了几口电子烟,吐出了白色的烟雾,有一股浓烈的水果香味。随后,她看着自己握电子烟的手,跟身边人说...
蒋万安号召“倒阁”,卢秀燕认为... 海峡导报综合报道 台北市长蒋万安27日抛出震撼议题,表示多名民代向他提议推动“倒阁”,要求台行政机构...
特朗普将在白宫会见两位重要客人 俄乌战争仍未结束,美伊冲突又有升级风险。在此背景下,美国总统特朗普将在白宫接见乌克兰和以色列领导人。...
新租客打扫卧室柜子上掉落4万元... 近日,莲前西路某小区内,张倩签下一套房子的租赁合同。当天上午,她带着12岁的大女儿周馨怡和11岁的小...
六部门通告:禁止涉军队退役报废... 关于禁止涉军队退役报废装备销售活动的通告近年来,部分经营者在线上线下公开销售涉及我军退役报废装备(指...
九寨沟景区发生泥石流,部分道路... 7月26日,九寨沟风景名胜区管理局发布泥石流灾害通报:2026年7月26日15时50分,九寨沟景区局...
空调26度不凉是什么原因 从空调内部元器件来说,不凉的原因有可能是温度传感器出现故障了,也有可能是空调压缩机或者铜管出现问题,...
鲸鸿动能携手香港国际机场、鸿蒙...   2026 年 7 月 25 日,十余位鸿蒙车主组成的车队从珠海出发,经港珠澳大桥通关抵达香港国际...