设为首页 收藏本站
查看: 833|回复: 0

[经验分享] [经验交流] Kubernetes Nginx Ingress 安装与使用

[复制链接]

尚未签到

发表于 2018-1-4 12:03:04 | 显示全部楼层 |阅读模式
Ingress 介绍
  Kubernetes 上部署的微服务运行在它的私有网络中, 通过Pod实例的hostPort或Service实例的NodePort可以暴露到主机端口上,便于用户访问。但这样的方法会占有多台主机的HTTP端口或一台主机的多个端口,既浪费端口资源又增加管理难度和安全风险。
  K8S的 Ingress 对象提供了另一种服务暴露的方法,它只占用一台主机的 HTTP 端口,通过虚拟主机或者虚拟目录的方式为K8S上的所有HTTP服务提供暴露服务,还能实现 HTTPS、负载均衡、状态统计等功能。
  K8S 的 nginx ingress 的作用类似于 mesos 的 marathon-lb,不同点是:前者基于 nginx;后者基于 haproxy。
  关于nginx ingress的安装,K8S有相关说明,网上也有很多文档可参考:
  https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx
  但在前期安装中,按照官网的说明并没有成功,查阅了大量资料,并结合实践最终排除了问题。下面分享一下我的安装过程。

1. 准备安装环境
  K8S 1.2

2. 启用Kubernetes API 认证
  http://kubernetes.io/docs/admin/authentication/
  这一步不能忽略,否则nginx ingress无法启动;
  还有几点要特别注意,否则nginx ingress启动时会出现TLS握手失败的错误:
  1)必须生成serviceAccount证书
  证书生成好后参考官网文档在apiserver和controller-manager中启用
  2)必须将Kubernetes的内网IP或域名加入到server.crt
  #Add Cluster IP of kubernetes to server.crt
  subjectAltName=`kubectl get services --all-namespaces |grep 'default'|grep 'kubernetes'|grep '443'|awk '{print $3}'`
  echo subjectAltName=IP:${subjectAltName} > extfile.cnf
  #According to the ca.key, ca.crt and server.csr generate the server.crt:
  openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out server.crt -days 10000
  3)更新证书后重启 K8S 并更新 secret 和 serviceaccount
  kubectl get secret --all-namespaces
  kubectl get serviceaccount --all-namespaces
  查看 default 开头的 secret 和 serviceaccount,将其删除,系统会自动重新生成;
  如果上述操作后某些 pod 仍出现TLS握手错误,则删除相关 deployment 或者 replicant后重新部署。

3. 安装 Nginx Ingress
  做完上述准备工作后,就可以按照官方文档进行安装了:
  https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx
  注:为了显示 nginx_status,需要在80, 443 之外再暴露 nginx ingress 的8080端口:
  

        ports:  
- containerPort: 80
  
hostPort: 80
  
- containerPort: 8080
  
hostPort: 8080
  
- containerPort: 443
  
hostPort: 443
  

  同时部署一个configmap文件,启用nginx的vts模块:
  

apiVersion: v1  
kind: ConfigMap
  
metadata:
  
name: nginx-load-balancer-conf
  
data:
  
enable-vts-status: "true"
  
~
  


4. 实例
  下面使用 nginx ingress 基于虚拟主机对 kubernetes-dashboards 进行服务暴露,并增加HTTPS功能:

4.1 创建 dashboard secret
  https://github.com/kubernetes/contrib/blob/master/ingress/controllers/nginx/examples/tls/README.md
  注意:创建密钥时,请填入虚拟主机名,比如:k8s-dashboard.gkkxd.com,否则HTTPS访问会被拒绝。

4.2 部署 dashboard
  

kind: Deployment  
apiVersion: extensions/v1beta1
  
metadata:
  
labels:
  
app: kubernetes-dashboard
  
version: v1.1.0
  
name: kubernetes-dashboard
  
namespace: kube-system
  
spec:
  
replicas: 1
  
selector:
  
matchLabels:
  
app: kubernetes-dashboard
  
template:
  
metadata:
  
labels:
  
app: kubernetes-dashboard
  
spec:
  
containers:
  
- name: kubernetes-dashboard
  
image: 172.31.17.36:5000/kubernetes-dashboard-amd64:v1.1.0
  
imagePullPolicy: IfNotPresent
  
ports:
  
- containerPort: 9090
  
protocol: TCP
  
args:
  
# Uncomment the following line to manually specify Kubernetes API server Host
  
# If not specified, Dashboard will attempt to auto discover the API server and connect
  
# to it. Uncomment only if the default does not work.
  
- --apiserver-host=http://172.31.17.81:8080
  
livenessProbe:
  
httpGet:
  
path: /
  
port: 9090
  
initialDelaySeconds: 30
  
timeoutSeconds: 30
  
---
  
kind: Service
  
apiVersion: v1
  
metadata:
  
labels:
  
app: kubernetes-dashboard
  
name: kubernetes-dashboard
  
namespace: kube-system
  
spec:
  
ports:
  
- port: 80
  
targetPort: 9090
  
selector:
  
app: kubernetes-dashboard
  

  

  注:请将service 的port 设置为80

4.3 创建 dashboard Ingress 实例
  

apiVersion: extensions/v1beta1  
kind: Ingress
  
metadata:
  
name: k8s-dashboard
  
namespace: kube-system
  
spec:
  
tls:
  
- hosts:
  
- k8s-dashboard.gkkxd.com
  
secretName: k8s-dashboard-secret
  
rules:
  
- host: k8s-dashboard.gkkxd.com
  
http:
  
paths:
  
- backend:
  
serviceName: kubernetes-dashboard
  
servicePort: 80
  
path: /
  

  

  注:请设置 tls, 虚拟主机名,backend service等参数

4.4 设置 DNS 或 hosts文件
  在 DNS 或 hosts文件中创建 k8s-dashboard.gkkxd.com 记录,之后就可以通过 http://k8s-dashboard.gkkxd.com 或者 https://k8s-dashboard.gkkxd.com 来访问 dashboard 了。

  nginx status:

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431482-1-1.html 上篇帖子: [系统集成] 基于Kubernetes 部署 jenkins 并动态分配资源 下篇帖子: kubernetes kubeadm部署高可用集群
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表