【发布时间】:2019-02-13 12:41:42
【问题描述】:
我对 Kubernetes 有点陌生,正在讨论“Ingress”。在阅读了 k8 文档和谷歌搜索后,我总结了以下内容。有人可以确认/纠正我的理解吗:
为了理解 Ingress,我将其分为 2 个部分:
云基础设施:
在这里面,有一个在主节点中运行的内置入口控制器(但是在运行 kubectl get pods -n all 时我们看不到它)。要配置,首先创建您的 Deployment Pods 并通过服务公开它们(Service Type=NodePort 必须)。此外,请确保创建默认后端服务。然后创建入口规则如下:
kind: Ingress
metadata:
name: app-ingress
spec:
backend:
serviceName: default-svc
servicePort: 80
rules:
- host: api.foo.com
http:
paths:
- path: /v1/
backend:
serviceName: api-svc-v1
servicePort: 80
- path: /v2/
backend:
serviceName: api-svc-v2
servicePort: 80
一旦将入口规则应用到 API 服务器,入口控制器就会监听 API 并更新 /etc/nginx.conf。此外,几分钟后,nginx 控制器会创建一个带有 IP(比如说 LB_IP)的外部负载均衡器
现在进行测试:在您的浏览器中,输入 http://api.foo.com/(or http://) 将重定向到默认服务和 http://api.foo.com/v1(or http:///v1) 将其重定向到服务 api-svc-v1
问题:
由于入口控制器 pod 不可见,我如何查看 /etc/nginx 文件。
在应用入口规则并创建外部 LB_IP 期间,是否所有注册商的所有 DNS 服务器都更新为 DNS 条目“api.foo.com”
使用 kubeadm 进行内部 kubernetes 部署:
这里没有外部入口控制器,您需要手动安装它。要进行配置,首先创建您的部署 pod 并通过服务公开它们(确保服务类型 = NodePort)。另外,请确保使用以下 yaml 文件创建 default-backend-service.Create Ingress 控制器:
spec:
containers:
-
args:
- /nginx-ingress-controller
- "--default-backend-service=\\$(POD_NAMESPACE)/default-backend"
image: "gcr.io/google_containers/nginx-ingress-controller:0.8.3"
imagePullPolicy: Always
livenessProbe:
httpGet:
path: /healthz
port: 10254
scheme: HTTP
initialDelaySeconds: 10
timeoutSeconds: 5
name: nginx-ingress-controller
readinessProbe:
httpGet:
path: /healthz
port: 10254
scheme: HTTP
我们可以看到使用“kubectl get pods”在node3中运行的入口控制器并登录到这个pod,我们可以看到/etc/nginx/nginx.conf
现在创建入口规则如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/rewrite-target: /
name: app-ingress
spec:
rules:
- host: testabc.com
http:
paths:
- backend:
serviceName: appsvc1
servicePort: 80
path: /app1
- backend:
serviceName: appsvc2
servicePort: 80
path: /app2
一旦将入口规则应用到 API 服务器,入口控制器就会监听 API 并更新 /etc/nginx.conf。但请注意,没有创建负载均衡器。相反,当您执行“kubectl get ingress”时,您会得到 Host=testabc.com 和 IP=127.0.0.1。现在要在外面公开这个入口控制器,我需要使用 type=NodePort 或 type=Loadbalancer 创建一个服务
kind: Service
metadata:
name: nginx-ingress
spec:
type: NodePort
ports:
- port: 80
nodePort: 33200
name: http
selector:
app: nginx-ingress-lb
在此之后,我们将获得一个外部 IP(如果 type=Loadbalancer)
现在进行测试:在您的浏览器中,输入 http://testabc.com/(or http://) 将重定向到默认服务和 http://testabc.com/v1(or http:///v1) 将其重定向到服务 api-svc-v1
问题:
3.如果 ingress-controller pod 在 node3 中运行,它如何监听 node1 中运行的 ingress api
【问题讨论】:
标签: nginx kubernetes