以最新版的nginx-ingress-controller:0.30.0为例
高可用Ingress 架构如下:
打开 https://github.com/kubernetes/ingress-nginx/blob/master/deploy/static/mandatory.yaml 然后Raw下载mandatory.yaml,修改其中的 nginx-ingress-controller 部分,也就是官网上的 with-rbac.yaml
1、修改Deployment为DaemonSet,并注释掉副本数
2、启用hostNetwork网络,并指定运行节点
hostNetwork暴露ingress-nginx controller的相关业务端口到主机,这样node节点主机所在网络的其他主机,都可以通过该端口访问到此应用程序。
nodeSelector指定之前添加ingress-controller=true标签的node
3、修改镜像地址
4、增加master节点容忍(可选)
tolerations: #增加容忍,可分配到master节点 - key: "node-role.kubernetes.io/master" operator: "Exists" effect: "NoSchedule"
修改完成后:
apiVersion: apps/v1
#kind: Deployment
kind: DaemonSet
metadata:
name: nginx-ingress-controller
namespace: ingress-nginx
labels:
k8s-app: ingress-controller
spec:
#replicas: 1
selector:
matchLabels:
k8s-app: ingress-controller
template:
metadata:
labels:
k8s-app: ingress-controller
annotations:
prometheus.io/port: "10254"
prometheus.io/scrape: "true"
spec:
# wait up to five minutes for the drain of connections
terminationGracePeriodSeconds: 300
serviceAccountName: nginx-ingress-serviceaccount
hostNetwork: true
nodeSelector:
ingress-controller: "true"
tolerations: #增加容忍,可分配到master节点
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"
containers:
- name: nginx-ingress-controller
image: registry-vpc.cn-beijing.aliyuncs.com/base/nginx-ingress-controller:0.30.0
args:
- /nginx-ingress-controller
- --configmap=$(POD_NAMESPACE)/nginx-configuration
- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
- --udp-services-configmap=$(POD_NAMESPACE)/udp-services
- --publish-service=$(POD_NAMESPACE)/ingress-nginx
- --annotations-prefix=nginx.ingress.kubernetes.io
securityContext:
allowPrivilegeEscalation: true
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
# www-data -> 101
runAsUser: 101
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
ports:
- name: http
containerPort: 80
#protocol: TCP
- name: https
containerPort: 443
#protocol: TCP
livenessProbe:
failureThreshold: 3
httpGet:
path: /healthz
port: 10254
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 10
readinessProbe:
failureThreshold: 3
httpGet:
path: /healthz
port: 10254
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 10
lifecycle:
preStop:
exec:
command:
- /wait-shutdown
节点打标签:
# kubectl label node master-92 ingress-controller="true"
此时再使用keepalived或外部slb进行高可用设置即可。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!