如何使用K8S的Ingress
Ingress的好处与特点我就没有必要再说一次了,本文主要说明的是使用方法
准备条件
请先完成K8S的安装,安装ingress,它包括一个defaulebackend,与nginx-ingress-control,并pull下需要的docker image
注意
这里请注意一点,为了方便,我们希望在部署ingress的时候,将部署文件Ymal中的一个条目修改
修改yaml,在nginx-ingress-controller这个deployment下面的spec.template.spec下面添加,如下
#spec:
hostNetwork: true
#serviceAccountName: nginx-ingress-serviceaccount
#containers:
开始
通过yaml创建ns,deployment,svc
deployment.yaml:
apiVersion: v1
kind: Namespace
metadata:
name: web-test-ns
---
apiVersion: v1
kind: Service
metadata:
name: web-svc-nodeport
namespace: web-test-ns
spec:
selector:
app: nginx
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
#nodePort: 8000
type: NodePort
external-ip=192.168.250.200
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: web-test-ns
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
# 执行
kubectl apply -f deployment.yaml
#查看结果
kubectl get pods -A -o wide
kubectl get deployment -n web-test-ns
kubectl get ns
kubectl get svc -n web-test-ns
通过Yaml生成Ingress:
ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-web
namespace: web-test-ns
spec:
rules:
- host: test.com
http:
paths:
- path:/
backend:
serviceName: web-svc
servicePort: 80
# 执行
kubectl apply -f ingress.yaml
#查看
kubectl get ingress -n web-test-ns
kubectl describe ingress ingress-web -n web-test-ns
Ingress control的入口地址是什么?怎么访问呢?
那么问题来了,我们怎么知道用哪个地址来访问Ingress的入口呢?执行以下命令查看
kubectl get pods -A -o wide
# 这里我们要找的就是类似以下的条目:
#ingress-nginx nginx-ingress-controller-5d796786f6-lzfhc 1/1 Running 2 12h 192.168.250.101 node <none> <none>
#这个192.168.250.101就是它的真正入口
#修改/etc/hosts
echo '192.168.250.101 test.com' >>/etc/hosts
#测试
curl test.com
#成功!