在 azure k8s 上设置入口
setup ingress on azure k8s
我正在尝试在 Azure 上设置入口。我有一个 pod 和服务 运行ning(一个网站)。
谷歌搜索有关 Ingress 设置的信息,看来您必须创建 3 个东西,Ingress、服务和 ingress 控制器 (pod)
这是我目前拥有的:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: myingress
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: ui.example.com
http:
paths:
- backend:
serviceName: ui
servicePort: 80
- host: monit.example.com
http:
paths:
- path:
backend:
serviceName: grafana
servicePort: 80
这几乎是不言自明的,但是 rewrite-target
到底做了什么(我有两个后端)?
接下来是负载均衡服务
apiVersion: v1
kind: Service
metadata:
name: ingressservice
spec:
ports:
- port: 80
name: http
- port: 443
name: https
selector:
k8s-app: nginx-ingress-controller
type: LoadBalancer
和入口控制器
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-ingress-controller
labels:
k8s-app: nginx-ingress-controller
spec:
replicas: 1
template:
metadata:
labels:
k8s-app: nginx-ingress-controller
annotations:
prometheus.io/port: '10254'
prometheus.io/scrape: 'true'
spec:
terminationGracePeriodSeconds: 60
containers:
- image: gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.15
name: nginx-ingress-controller
ports:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
args:
- /nginx-ingress-controller
- --default-backend-service=$(POD_NAMESPACE)/default-http-backend
问题:
* 所有这些如何协同工作?
* ingress-controller 的图像是否正确? (在 Azure 上应该 运行)
与您的 kubernetes 在哪个云上运行无关,入口发生在 kubernetes 内部,因此它与云无关。要设置入口,您可以为此使用 official helm chart。之后,您需要创建入口定义以使用您创建的入口公开您的服务。
如果您 运行 在数字海洋、GCP、AWS、Azure kubernetes 上设置,则不会,它的组件将同样工作。
所以如果你还没有安装 ingress-controller,你必须安装它。
您也可以按照本教程设置入口控制器和证书管理器:https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes
我正在尝试在 Azure 上设置入口。我有一个 pod 和服务 运行ning(一个网站)。
谷歌搜索有关 Ingress 设置的信息,看来您必须创建 3 个东西,Ingress、服务和 ingress 控制器 (pod)
这是我目前拥有的:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: myingress
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: ui.example.com
http:
paths:
- backend:
serviceName: ui
servicePort: 80
- host: monit.example.com
http:
paths:
- path:
backend:
serviceName: grafana
servicePort: 80
这几乎是不言自明的,但是 rewrite-target
到底做了什么(我有两个后端)?
接下来是负载均衡服务
apiVersion: v1
kind: Service
metadata:
name: ingressservice
spec:
ports:
- port: 80
name: http
- port: 443
name: https
selector:
k8s-app: nginx-ingress-controller
type: LoadBalancer
和入口控制器
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-ingress-controller
labels:
k8s-app: nginx-ingress-controller
spec:
replicas: 1
template:
metadata:
labels:
k8s-app: nginx-ingress-controller
annotations:
prometheus.io/port: '10254'
prometheus.io/scrape: 'true'
spec:
terminationGracePeriodSeconds: 60
containers:
- image: gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.15
name: nginx-ingress-controller
ports:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
args:
- /nginx-ingress-controller
- --default-backend-service=$(POD_NAMESPACE)/default-http-backend
问题: * 所有这些如何协同工作? * ingress-controller 的图像是否正确? (在 Azure 上应该 运行)
与您的 kubernetes 在哪个云上运行无关,入口发生在 kubernetes 内部,因此它与云无关。要设置入口,您可以为此使用 official helm chart。之后,您需要创建入口定义以使用您创建的入口公开您的服务。
如果您 运行 在数字海洋、GCP、AWS、Azure kubernetes 上设置,则不会,它的组件将同样工作。
所以如果你还没有安装 ingress-controller,你必须安装它。
您也可以按照本教程设置入口控制器和证书管理器:https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes