ingress实现虚拟主机的方案:
步骤:
总的:建立两个deployment 两个对应的svc,和两个ingress
建立yaml文件
vimdeployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: deployment-1
spec:
replicas: 2
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: svc-1
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
name: nginx
vim deployment2.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: deployment-2
spec:
replicas: 2
template:
metadata:
labels:
name: nginx2
spec:
containers:
- name: nginx2
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: svc-2
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
name: nginx2
vim ingressrule.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress1
spec:
rules:
- host: www1.kk.com
http:
paths:
- path: /
backend:
serviceName: svc-1
servicePort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress2
spec:
rules:
- host: www2.kk.com
http:
paths:
- path: /
backend:
serviceName: svc-2
servicePort: 80
注意: 对应的标签一定要写好。
创建:
kubectl apply -f deployment.yaml
kubectl apply -f deployment2.yaml
kubectl apply -f ingressrule.yaml
查看容器nginx.config的配置:
找到容器:
[root@apiserver ingress-vh]# kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE
nginx-ingress-controller-94cd6cc55-tj9n5 1/1 Running 0 4h27m
进入容器查看:
[root@apiserver ingress-vh]# kubectl exec -it nginx-ingress-controller-94cd6cc55-tj9n5 -n ingress-nginx -- /bin/bash
cat nginx.conf
配置宿主机的/etc/hosts的域名配置,添加如下:
192.168.10.167 www1.kk.com
192.168.10.167 www2.kk.com
得到暴露的端口:(80:31866/TCP,443:30271/TCP)
[root@apiserver ingress-vh]# kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx NodePort 10.110.60.132 80:31866/TCP,443:30271/TCP 4h20m
在网页用域名+端口访问
www1.kk.com: 31866和www2.kk.com:31866 都能访问到nginx
但我在这里出现了一点问题:访问www1.kk.com: 31866时一直报错:
503 service temporarily unavailable
这时出现错误的原因是我没有把ing和svc中上次练习的删掉,
[root@apiserver ingress-vh]# kubectl get ing,svc
NAME HOSTS ADDRESS PORTS AGE
ingress.extensions/ingress1 www1.kk.com 10.110.60.132 80 36m
ingress.extensions/ingress2 www2.kk.com 10.110.60.132 80 36m
ingress.extensions/nginx-test www1.kk.com 10.110.60.132 80 3h20m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d23h
service/svc-1 ClusterIP 10.110.128.231 <none> 80/TCP 50m
service/svc-2 ClusterIP 10.97.6.38 <none> 80/TCP 14m
删掉ing nginx-test 就好了:
[root@apiserver ingress-vh]# kubectl delete ing nginx-test