1、拉取镜像docker pull httpd
2、创建一个podvi /home/httpd.yaml
填入:apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd
spec:
replicas: 1
selector:
matchLabels:
app: httpd
template:
metadata:
labels:
app: httpd
spec:
containers:
- name: httpd
image: httpd:latest
3、创建一个servicevi /home/http_svc1.yaml
填入:apiVersion: v1
kind: Service
metadata:
name: httpd-svc1
labels:
app: httpd
spec:
type: ClusterIP
selector:
app: httpd
ports:
- port: 80
targetPort: 80
4、创建一个ingressvi /home/ingress_httpd.yaml
填入:apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: httpd-test
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: foo.bar.com
http:
paths:
- path:
backend:
serviceName: httpd-svc1
servicePort: 80
5、执行kubectl create -f /home/httpd.yaml
kubectl create -f /home/http_svc1.yaml
kubectl create -f /home/ingress_httpd.yaml
6、说明
1)service会映射到pod上,所以selector配置的labels要和pod里的一致
2)ingress会映射到service上,通过serviceName和servicePort
3)http_svc1.yaml里port是service的端口,targetPort是pod的端口
4)apiVersion的版本很有讲究,版本不同语法也不同
7、CLUSTER-IP方式的pod和service可以在所安装的node上访问,其他node、master都不能访问(这里是错的,应该集群内部都能访问,后面有改)kubectl get all -o wide
找到:NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/httpd-84898796c-v6bkv 1/1 Running 0 6h28m 10.122.1.18 k8s-node1 <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/httpd-svc1 ClusterIP 10.103.242.174 <none> 80/TCP 6h21m app=httpd
在node1上访问:
curl http://10.122.1.18
curl http://10.103.242.174
均返回:<html><body><h1>It works!</h1></body></html>
8、外网访问
由于nginx-ingress使用nodePort方式对外暴露ip和端口
访问:curl -H 'Host:foo.bar.com' http://node1的IP:PORT/
显示:<html><body><h1>It works!</h1></body></html>
如果不加域名,则返回其他错误,说明配置生效
9、进入nginx-ingress容器内kubectl exec -it gateway-nginx-ingress-84fd9b79fd-tmnj6 -n nginx-ingress -- /bin/bash
nginx@k8s-node2:/$ cat /etc/nginx/nginx.conf
发现在/etc/nginx/conf.d下生成了配置文件default-httpd-test.conf
10、查看ingresskubectl get ingress
kubectl describe ingress httpd-test
参考资料:
https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-helm/