分享都要写在前面,在IDEA中使用Kubernetes插件查看和管理你的容器组
通过IDEA管理你的Kubernetes
好了,分享之后进入正题。?前段时间在使用ingress controller的时候选择的是traefik,最近新起的一台Kubernetes集群中,使用的是ingress controller,对于不同的ingress控制器,虽然使用理念都是差不多,但是实际使用区别上还是有些不同,接下来将会对Ingress Controller进行深入的学习和研究。依旧是如往常一样,在体验不同方案最好的理解就是上手折腾一番,以下就首先开始ingress controller的安装部署
我们将在以下环境内进行一些学习和研究。K8s集群信息
☸️ kubernetes-admin@kubernetes? default ? ? k get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready master 5d9h v1.18.0
node1 Ready <none> 5d9h v1.18.0
node2 Ready <none> 5d9h v1.18.0
node3 Ready <none> 5d9h v1.18.0
node4 Ready <none> 5d9h v1.18.0
与traefik一样,ingress-nginx同样是部署在公网的边缘节点上,通过暴露一个端口,以及一系列的自定义规则将公网流量代理到集群内的service。ingress-nginx与traefik具体的使用还是有很大的区别,以后在使用中再说
--watch-namespace
指定kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
# using NodePort
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
# 验证服务的运行状态
kubectl get pods --all-namespaces -l app.kubernetes.io/name=ingress-nginx --watch
# 查看ingress-controller运行的状态
☸️ kubernetes-admin@kubernetes? ingress-nginx master ● ? ? POD_NAMESPACE=ingress-nginx
☸️ kubernetes-admin@kubernetes? ingress-nginx master ● ? ? POD_NAME=$(kubectl get pods -n $POD_NAMESPACE -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[0].metadata.nme}')
☸️ kubernetes-admin@kubernetes? ingress-nginx master ● ? ?
☸️ kubernetes-admin@kubernetes? ingress-nginx master ● ? ? kubectl exec -it $POD_NAME -n $POD_NAMESPACE -- /nginx-ingress-controller --version
-------------------------------------------------------------------------------
NGINX Ingress controller
Release: 0.30.0
Build: git-7e65b90c4
Repository: https://github.com/kubernetes/ingress-nginx
nginx version: nginx/1.17.8
-------------------------------------------------------------------------------
查看ingress-nginx的部署状态
接下来将通过一个tomcat服务来验证ingress-nginx是否可用,这里将会通过deployment部署三个副本的tomcat容器,然后暴露tomcat的8080端口以及8009(ajp). 配置文件名为: tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat
namespace: default
labels:
app: tomcat
spec:
replicas: 3
template:
metadata:
name: tomcat
labels:
app: tomcat
release: canary
spec:
containers:
- name: tomcat
image: tomcat:8.5.32-jre8-alpine
imagePullPolicy: IfNotPresent
restartPolicy: Always
selector:
matchLabels:
app: tomcat
release: canary
---
apiVersion: v1
kind: Service
metadata:
name: tomcat-svc
namespace: default
spec:
selector:
app: tomcat
release: canary
ports:
- port: 8080
name: http
targetPort: 8080
- name: ajp
targetPort: 8009
port: 8009
---
kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
name: ingress-tomcat
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: tomcat.local.com
http:
paths:
- path: /
backend:
serviceName: tomcat-svc
servicePort: http
tomcat服务运行状态
最后,与traefik相似,我们通过域名以及ingress-nginx-controller暴露出来的NodePort端口进行访问.此处需要添加本地的DNS解析
添加本地域名解析
然后即可在浏览器中访问
浏览器中访问服务