本文已参与[新人创作礼]活动,一起开启掘金创作之路。
采用的nginx官方提供的ingress-nginx控制器:kubernetes.github.io/ingress-ngi…
在这里需要注意以下几点: 1、由于我的kubernetes集群只使用了一台服务器,如果你是多台服务器的话,需要将deployment改为daemonset方式部署
2、官方提供的镜像由于特殊原因无法使用,可以去docker hub搜索同名镜像替换,pollyduan/ingress-nginx-controller:v0.47.0
3、deployment.spec.template.spec下添加hostNetwork: true,从而使其可以使用物理机网络。daemonset模式会将所有节点的80,443端口占用
相比较起来,nodePort部署模式中需要部署的ingress-controller容器较少。一个集群可以部署几个就可以了。而hostNetwork模式需要在每个节点部署一个ingress-controller容器,因此总起来消耗资源较多。另外一个比较直观的区别,nodePort模式主要占用的是svc的nodePort端口。而hostNetwork则需要占用物理机的80和443端口。从网络流转来说,通过nodePort访问时,该node节点不一定部署了ingress-controller容器。因此还需要iptables将其转发到部署有ingress-controller的节点上去,多了一层流转。另外,通过nodePort访问时,nginx接收到的http请求中的source ip将会被转换为接受该请求的node节点的ip,而非真正的client端ip。而使用hostNetwork的方式,ingress-controller将会使用的是物理机的DNS域名解析(即物理机的/etc/resolv.conf)。而无法使用内部的比如coredns的域名解析。
编写一个yaml文件,部署ingress试一下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: www.test.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
kubectl get ingress命令查看,类似如下即可
不过现在还不能访问,需要配置域名解析,两种方式:
第一种如果只是自己访问测试用的话,可以配置本地host解析。linux系统在/etc/hosts文件中更改,windows系统在C:\Windows\System32\drivers\etc\hosts文件。
第二种在各大云平台上购买域名,配置dns解析。