安装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 <none> 80/TCP 6d
ingress-nginx NodePort 10.98.149.237 <none> 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 <none> 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 <none> 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
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
创建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/
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>