nginx - Kubernetes 服务的 Nginx 路由
问题描述
我有与这篇文章中提到的相同的要求 - https://tech.holidayextras.com/routing-to-internal-kubernetes-services-using-proxies-and-ingress-controllers-e7eb44954d53
但我不确定那里提到的后端 ipaddresses 是什么。我认为这是集群中我的主节点和工作节点的 ip
我的 kubernetes 的主节点 ip 为 10.118.6.35,工作节点 ip 为 10.118.2.215,它们是 AWS ec2 实例。
因此,当我在 nginx.conf 中进行如下配置时(请参阅下文),当我执行 curl https://10.118.6.35时,会呈现 index.html
但是当我做https://10.118.6.35/hello-kenzan 我得到 nginx 错误页面默认 404 页面但我希望将它路由到我在 NodePort 80:30854 中运行的 kubernetes 服务
我已按照该帖子中提到的步骤进行操作。仅供参考,我在下面显示 echo-ing.yaml -
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: echomap
annotations: {
'kubernetes.io/ingress.class': nginx
}
spec:
rules:
- host: ip-10-118-6-35.ec2.internal
http:
paths:
- path: /hello-kenzan
backend:
service and: hello-kenzan
service port: 80
下面是 nginx.conf -
http {
ssl_certificate ...
....
....
server {
listen 443 SSL;
server_name www.ip-10.118-6-35.ec2.internal.com;
root /usr/share/nginx/html;
ssl_certificate ...
...
...
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
upstream backend_nodes {
server 10.118.6.35:31001;
server 10.118.2.215:31001;
}
upstream backend_nodes_ssl {
server 10.118.6.35:32001;
server 10.118.2.215:32001;
}
server {
listen 80;
server_name backends.nodes;
location / {
proxy_pass https://backend_nodes;
}
}
server {
listen 443;
server_name backends.nodes.ssl;
location / {
proxy_pass https://backend_nodes_ssl;
}
}
}
请建议为后端节点 ips 提供什么
更新
嘿,当我尝试使用浏览器中的 IP 地址而不是 DNS 名称时,它终于可以工作了-
https://10.118.6.35/hello-kenzan <- 现在可以正常工作 https://myservice.myorg.com/hello-kenzan <- 由于 nginx 错误页面暂时不可用,这无法正常工作。
但是https://myservice.myorg.com <- 通过欢迎来到 nginx 索引页面来工作。
这是我修改后的 nginx.conf -
http {
ssl_certificate ...
....
....
server {
listen 80;
server_name ip-10.118-6-35.ec2.internal;
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
location / {
}
location /hello-kenzan {
proxy_pass https://backend_nodes;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
server {
listen 443 SSL;
server_name ip-10.118-6-35.ec2.internal;
root /usr/share/nginx/html;
ssl_certificate ...
...
...
include /etc/nginx/default.d/*.conf;
location / {
}
location /hello-kenzan {
proxy_pass https://backend_nodes_ssl;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
upstream backend_nodes {
server 10.96.88.237:80
}
upstream backend_nodes_ssl {
server 10.96.88.237:443
}
}
有什么想法吗??
解决方案
当您尝试使用主 IP 和节点 Ip 时,nginx 入口控制器的方法是绝对错误的。当您添加入口 nginx 控制器时,它会使负载均衡器落后(如果使用 aws,数字海洋,您会在其控制台中检查负载均衡器)。
you have to use the load balancer ip rather then using ip of node and master ip.
启动 nginx 入口控制器
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
有关更多信息,请访问此如果有任何查询添加评论:
https://knowihave.blogspot.com/2019/02/how-to-set-up-nginx-ingress-with-cert.html
最后在这里安装证书管理器,您可以删除该部分,其他所有事情都简单易行。
推荐阅读
- excel - 按钮单击后UpdatePanel中的Gridview空白
- windows - 代码签名后如何检查软件信誉
- r - 为什么我的 allEffects 图表中的值有误?
- c# - 如何实现一个由鼠标移动的 WPF 控件,如滑块控件但 2D?
- php - 解析点分隔的字符串并创建一个多维数组
- flutter - StatefulBuilder 不更新底部工作表上的状态
- r - 尝试将 xml 文件转换为 tibble dateframe 时遇到的问题
- javascript - 使用 amcharts 5 构建 nextjs 12 失败
- android - 从我的 iOS 和 Android 应用程序打开链接到 Facebook 和 Instagram
- java - Java如何限制一行中打印的字符数量