安装ingress-nginx
[root@bogon:~/k8s/ingress/ingress-nginx# kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml]
[namespace "ingress-nginx" created](interm)
[deployment "default-http-backend" created](interm)
[service "default-http-backend" created](interm)
[configmap "nginx-configuration" created](interm)
[configmap "tcp-services" created](interm)
[configmap "udp-services" created](interm)
[serviceaccount "nginx-ingress-serviceaccount" created](interm)
[clusterrole "nginx-ingress-clusterrole" created](interm)
[role "nginx-ingress-role" created](interm)
[rolebinding "nginx-ingress-role-nisa-binding" created](interm)
[clusterrolebinding "nginx-ingress-clusterrole-nisa-binding" created](interm)
[deployment "nginx-ingress-controller" created](interm)
[root@bogon:~/k8s/ingress/ingress-nginx# kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml
安装完成后,查看一下ingress-nginx相关的组件的创建情况:
root@bogon:~/k8s/ingress/ingress-nginx# kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
default-http-backend-55c6c69b88-rfq4n 0/1 ContainerCreating 0 29s
nginx-ingress-controller-7cc74ccd44-h827j 0/1 ContainerCreating 0 28s
从上图中看出nginx-ingress-controller和default-http-backend两个组件都正在创建,间隔一段时间,继续观察,知道Pod处于运行状态
root@bogon:~/k8s/ingress# kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
default-http-backend-55c6c69b88-rfq4n 1/1 Running 1 6d
nginx-ingress-controller-7cc74ccd44-h827j 1/1 Running 1 6d
到现在为止,说明整个ingress-nginx的组件已经全部启动,查看相应的组件:
root@bogon:~/k8s/ingress# kubectl get service -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default-http-backend ClusterIP 10.111.66.202 80/TCP 6d
ingress-nginx NodePort 10.98.149.237 80:31230/TCP,443:30458/TCP 6d
验证服务安装的服务的可用性,系统自动安装了一个default-http-backend,这是一个缺省的http后端服务,用于返回404结果,如下所示:
default backend - 404root@bogon:~/k8s/ingress# kubectl get service ingress-nginx -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx NodePort 10.98.149.237 80:31230/TCP,443:30458/TCP 6d
root@bogon:~/k8s/ingress# curl http://10.98.149.237:80
default backend - 404root@bogon:~/k8s/ingress#
root@bogon:~/k8s/ingress#
root@bogon:~/k8s/ingress# curl http://127.0.0.1:31230
default backend - 404root@bogon:~/k8s/ingress#
root@bogon:~/k8s/ingress#
从上文中,可以看出ingress-nginx是一个NodePort Servide,它除了向集群内部暴漏ClusterIP:Port为10.98.149.237:80 ,同时还会向集群外部在每个节点上暴漏31230端口。
创建一个应用以及相应服务
准备好Pod和Service的配置文件 nginx.yaml
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ingress-nginx
labels:
app: web
spec:
hostNetwork: false
containers:
- name: nginx
image: nginx
---
kind: Service
apiVersion: v1
metadata:
name: my-service
namespace: ingress-nginx
spec:
selector:
app: web
ports:
- protocol: TCP
port: 1005
targetPort: 80
创建nginx pod以及my-service服务:
kubectl apply -f nginx.yaml
root@bogon:~/k8s/ingress# kubectl get service my-service -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-service ClusterIP 10.111.173.60 1005/TCP 2m
nginx-ingress-controller-7cc74ccd44-h827j 1/1 Running 1 6d
root@bogon:~/k8s/ingress# kubectl get pod nginx -n ingress-nginx
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 2m
验证服务是否可用:
root@bogon:~/k8s/ingress# curl http://10.111.173.60:1005
Welcome to nginx!
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
创建ingress服务
准备好test-ingress.yaml文件
root@bogon:~/k8s/ingress# cat test-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
namespace: ingress-nginx
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /
backend:
serviceName: my-service
servicePort: 1005
验证ingress反向代理服务:
root@bogon:~/k8s/ingress# curl http://127.0.0.1:31230
default backend - 404root@bogon:~/k8s/ingress#
root@bogon:~/k8s/ingress#
root@bogon:~/k8s/ingress#
root@bogon:~/k8s/ingress# curl -H "Host: foo.bar.com" http://127.0.0.1:31230/
Welcome to nginx!
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.