ฉันมีปัญหามากมายที่ดูเหมือนจะเกิดจากการอัปเกรดคลัสเตอร์ kubernetes เป็นเวอร์ชันล่าสุด (1.23.5) ตอนแรกฉันมีปัญหาบางอย่างกับตัวคลัสเตอร์เองและโหนด แต่ดูเหมือนว่าจะได้รับการแก้ไขแล้ว และคลัสเตอร์ก็ดูเหมือนจะมีสุขภาพดี อย่างน้อยมันก็บอกว่าเมื่อฉันเรียกใช้ kops ตรวจสอบคลัสเตอร์
. ปัญหาที่ฉันพบตอนนี้คือพ็อด ingress-nginx ของฉันไม่ทำงาน ซึ่งหมายความว่าโหลดบาลานเซอร์ของฉันไม่มีอะไรต้องชี้ ดังนั้นฉันจึงไม่สามารถเข้าถึงแอปพลิเคชันของฉันได้ แม้ว่าพ็อดแอปพลิเคชันจะทำงานโดยไม่มีปัญหา ฉันใช้หางเสือเพื่อสร้างทรัพยากร ingress-nginx และจะวางไฟล์ที่ฉันพยายามใช้ด้านล่างเพื่ออัปเกรด ฉันได้ลองทำหลายสิ่งหลายอย่างเกี่ยวกับสิ่งนี้และฉันคิดว่าสิ่งสำคัญที่ฉันขาดหายไปคือเนื้อหาใน IngressClass และฉันได้พยายามรวมสิ่งนั้นไว้ในหลาย ๆ ที่ แต่ฉันไม่เห็นวิธีการทำเช่นนั้นคลัสเตอร์ของฉันมีตัวควบคุมขาเข้าเพียงตัวเดียว และมีอินสแตนซ์ Ingress ที่กำหนดไว้ในการปรับใช้สำหรับแต่ละอินสแตนซ์ของแอปพลิเคชัน คุณยังจะเห็นว่า AppVersion เป็น 0.24.0 ฉันได้ลองชนมันหลายวิธีและใช้อิมเมจต่างๆ ใน deployment.yaml
rbac.yml
api เวอร์ชัน: v1
ชนิด: ServiceAccount
ข้อมูลเมตา:
ชื่อ: {{ .Chart.Name }}-serviceaccount
---
รุ่น api: rbac.authorization.k8s.io/v1
ประเภท: ClusterRole
ข้อมูลเมตา:
ชื่อ: {{ .Chart.Name }}-clusterrole
กฎ:
- กลุ่ม api:
- ""
ทรัพยากร:
- configmaps
- จุดสิ้นสุด
- โหนด
- ฝัก
- ความลับ
คำกริยา:
- รายการ
- นาฬิกา
- กลุ่ม api:
- ""
ทรัพยากร:
- โหนด
คำกริยา:
- รับ
- กลุ่ม api:
- ""
ทรัพยากร:
- บริการ
คำกริยา:
- รับ
- รายการ
- นาฬิกา
- กลุ่ม api:
- "ส่วนขยาย"
ทรัพยากร:
- ทางเข้า
คำกริยา:
- รับ
- รายการ
- นาฬิกา
- กลุ่ม api:
- ""
ทรัพยากร:
- เหตุการณ์
คำกริยา:
- สร้าง
- ปะ
- กลุ่ม api:
- "ส่วนขยาย"
ทรัพยากร:
- ทางเข้า / สถานะ
คำกริยา:
- อัปเดต
---
รุ่น api: rbac.authorization.k8s.io/v1
ชนิด: บทบาท
ข้อมูลเมตา:
ชื่อ: {{ .Chart.Name }}-บทบาท
กฎ:
- กลุ่ม api:
- ""
ทรัพยากร:
- configmaps
- ฝัก
- ความลับ
- เนมสเปซ
คำกริยา:
- รับ
- กลุ่ม api:
- ""
ทรัพยากร:
- configmaps
ชื่อทรัพยากร:
# ค่าเริ่มต้นเป็น "<election-id>-<ingress-class>"
# ที่นี่: "<ingress-controller-leader>-<nginx>"
# สิ่งนี้จะต้องปรับเปลี่ยนหากคุณเปลี่ยนพารามิเตอร์ตัวใดตัวหนึ่ง
# เมื่อเปิดตัว nginx-ingress-controller
- "ตัวควบคุมขาเข้าผู้นำ nginx"
คำกริยา:
- รับ
- อัปเดต
- กลุ่ม api:
- ""
ทรัพยากร:
- configmaps
คำกริยา:
- สร้าง
- กลุ่ม api:
- ""
ทรัพยากร:
- จุดสิ้นสุด
คำกริยา:
- รับ
---
รุ่น api: rbac.authorization.k8s.io/v1
ชนิด: RoleBinding
ข้อมูลเมตา:
ชื่อ: {{ .Chart.Name }}-nisa-binding
บทบาทอ้างอิง:
apiGroup: rbac.authorization.k8s.io
ชนิด: บทบาท
ชื่อ: {{ .Chart.Name }}-บทบาท
วิชา:
- ประเภท: ServiceAccount
ชื่อ: {{ .Chart.Name }}-serviceaccount
เนมสเปซ: {{ .Release.Namespace }}
---
รุ่น api: rbac.authorization.k8s.io/v1
ชนิด: ClusterRoleBinding
ข้อมูลเมตา:
ชื่อ: {{ .Chart.Name }}-clusterrole-nisa-binding
บทบาทอ้างอิง:
apiGroup: rbac.authorization.k8s.io
ประเภท: ClusterRole
ชื่อ: {{ .Chart.Name }}-clusterrole
วิชา:
- ประเภท: ServiceAccount
ชื่อ: {{ .Chart.Name }}-serviceaccount
เนมสเปซ: {{ .Release.Namespace }}
บริการ. yaml
---
# บริการหลักรับส่งข้อมูล http
ชนิด:บริการ
api เวอร์ชัน: v1
ข้อมูลเมตา:
ชื่อ: loadbalancer-ingress
ป้ายกำกับ:
app.kubernetes.io/managed-by: หางเสือ
คำอธิบายประกอบ:
{{- if .Values.loadbalancer.cert }}
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: {{ .Values.loadbalancer.cert | อ้าง }}
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "{{- range .Values.loadbalancer.ports -}}{{- if .ssl -}}{{ .name }},{{ - จบ -}}{{- จบ -}}"
{{- จบ }}
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: {{ .Values.loadbalancer.backend_protocol | อ้าง }}
service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "60"
ข้อมูลจำเพาะ:
ประเภท: LoadBalancer
ตัวเลือก:
พ็อด: {{ .Chart.Name }}
พอร์ต:
{{- ช่วง .Values.loadbalancer.ports }}
- ชื่อ: {{ .name }}
พอร์ต: {{ .พอร์ต }}
พอร์ตเป้าหมาย: {{ .targetPort }}
{{- จบ }}
---
# บริการจำลองเพื่อหยุดคอนโทรลเลอร์จากการจู้จี้เกี่ยวกับบริการ ingress-nginx
ชนิด:บริการ
api เวอร์ชัน: v1
ข้อมูลเมตา:
ชื่อ: ingress-nginx
ป้ายกำกับ:
app.kubernetes.io/managed-by: หางเสือ
ข้อมูลจำเพาะ:
พอร์ต:
- ชื่อ: http
พอร์ต: 10254
พอร์ตเป้าหมาย: 10254
ตัวเลือก:
พ็อด: {{ .Chart.Name }}
---
การปรับใช้ yaml
---
apiVersion: แอป/v1
ชนิด: DaemonSet
ข้อมูลเมตา:
ชื่อ: {{ .Chart.Name }}-ตัวควบคุม
ข้อมูลจำเพาะ:
ตัวเลือก:
ป้ายกำกับการแข่งขัน:
พ็อด: {{ .Chart.Name }}
แม่แบบ:
ข้อมูลเมตา:
ป้ายกำกับ:
พ็อด: {{ .Chart.Name }}
คำอธิบายประกอบ:
prometheus.io/port: "10254"
prometheus.io/scrape: "จริง"
Fluffybit.io/parser: k8s-nginx-ingress
ข้อมูลจำเพาะ:
serviceAccountName: {{ .Chart.Name }}-serviceaccount
ตู้คอนเทนเนอร์:
- ชื่อ: {{ .Chart.Name }}-ตัวควบคุม
รูปภาพ: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:{{ .Chart.AppVersion }}
หาเรื่อง:
- /nginx-ingress-ตัวควบคุม
- --configmap=$(POD_NAMESPACE)/{{ .Chart.Name }}-nginx-configuration
- --tcp-services-configmap=$(POD_NAMESPACE)/{{ .Chart.Name }}-tcp-services
- --udp-services-configmap=$(POD_NAMESPACE)/{{ .Chart.Name }}-udp-services
- --public-service=$(POD_NAMESPACE)/loadbalancer-เข้า
- --annotations-prefix=nginx.ingress.kubernetes.io
บริบทความปลอดภัย:
allowPrivilegeEscalation: จริง
ความสามารถ:
หยด:
- ทั้งหมด
เพิ่ม:
- NET_BIND_SERVICE
# www-ข้อมูล -> 33
เรียกใช้ AsUser: 33
สภาพแวดล้อม:
- ชื่อ: POD_NAME
มูลค่าจาก:
fieldRef:
fieldPath: metadata.name
- ชื่อ: POD_NAMESPACE
มูลค่าจาก:
fieldRef:
fieldPath: metadata.namespace
พอร์ต:
- ชื่อ: http
ตู้คอนเทนเนอร์พอร์ต: 80
- ชื่อ: เมตริก
พอร์ตคอนเทนเนอร์: 10254
livenessProbe:
เกณฑ์ความล้มเหลว: 3
httpรับ:
เส้นทาง: /healthz
พอร์ต: 10254
รูปแบบ: HTTP
initialDelaySeconds: 10
periodSeconds: 10
เกณฑ์ความสำเร็จ: 1
หมดเวลาวินาที: 10
ความพร้อม Probe:
เกณฑ์ความล้มเหลว: 3
httpรับ:
เส้นทาง: /healthz
พอร์ต: 10254
รูปแบบ: HTTP
periodSeconds: 10
เกณฑ์ความสำเร็จ: 1
หมดเวลาวินาที: 10
configmap.yaml
---
ประเภท: ConfigMap
api เวอร์ชัน: v1
ข้อมูลเมตา:
ชื่อ: {{ .Chart.Name }}-nginx-configuration
ข้อมูล:
ใช้พร็อกซีโปรโตคอล: "เท็จ"
ใช้ส่งต่อส่วนหัว: "จริง"
โทเค็นเซิร์ฟเวอร์: "เท็จ"
---
ประเภท: ConfigMap
api เวอร์ชัน: v1
ข้อมูลเมตา:
ชื่อ: {{ .Chart.Name }}-tcp-services
---
ประเภท: ConfigMap
api เวอร์ชัน: v1
ข้อมูลเมตา:
ชื่อ: {{ .Chart.Name }}-udp-services
Chart.yaml
ชื่อ: ingress-nginx
คำอธิบาย: Cluster - Ingress Controller
รุ่น: 1
api เวอร์ชัน: v1
เวอร์ชันแอป: "0.24.0"
ค่า. yaml
โหลดบาลานเซอร์:
backend_protocol: http
ใบรับรอง: <my-cert>
พอร์ต:
- ชื่อ: http
พอร์ต: 80
พอร์ตเป้าหมาย: 80
ssl: เท็จ
- ชื่อ: https
พอร์ต: 443
พอร์ตเป้าหมาย: 80
ssl: จริง
คำสั่ง ฉันกำลังทำงาน
หางเสืออัพเกรด ingress-nginx --install --namespace ingress-nginx ./
ผลลัพธ์ที่ฉันได้รับในปัจจุบัน
W0327 19:53:47.472827 8 client_config.go:614] ไม่ได้ระบุ --kubeconfig และ --master การใช้ inClusterConfig สิ่งนี้อาจไม่ทำงาน
I0327 19:53:47.473136 8 main.go:241] "กำลังสร้างไคลเอ็นต์ API" host="https://100.64.0.1:443"
I0327 19:53:47.487201 8 main.go:285] "ทำงานในคลัสเตอร์ Kubernetes" major="1" minor="23" git="v1.23.5" state="clean" commit="c285e781331a3785a7f436042c65c5641ce8a9e9" platform="linux /amd64"
I0327 19:53:47.684135 8 main.go:105] "สร้างใบรับรอง SSL ปลอมแล้ว" file="/etc/ingress-controller/ssl/default-fake-certificate.pem"
I0327 19:53:47.689215 8 main.go:115] "เปิดใช้ฟีเจอร์ Ingress ใหม่ตั้งแต่ Kubernetes v1.18"
E0327 19:53:47.692044 8 main.go:124] "การค้นหา IngressClass" err="ingressclasses.networking.k8s.io \"nginx\" เป็นสิ่งต้องห้าม: ผู้ใช้ \"ระบบ:serviceaccount:ingress-nginx:ingress-nginx- serviceaccount\" ไม่สามารถรับทรัพยากร \"ingressclasses\" ในกลุ่ม API \"networking.k8s.io\" ที่ขอบเขตคลัสเตอร์" class="nginx"
W0327 19:53:47.692070 8 main.go:127] ไม่พบทรัพยากร IngressClass ที่มีชื่อ nginx จะใช้คำอธิบายประกอบเท่านั้น
I0327 19:53:47.739577 8 nginx.go:254] "กำลังเริ่มต้นตัวควบคุม NGINX Ingress"
I0327 19:53:47.755865 8 event.go:282] เหตุการณ์ (v1.ObjectReference{ชนิด:"ConfigMap", เนมสเปซ:"ingress-nginx", ชื่อ:"ingress-nginx-tcp-services", UID:"6115a34f- 4f95-4f99-970a-b65477e45808", APIVersion:"v1", ResourceVersion:"103400810", FieldPath:""}): ประเภท: 'ปกติ' เหตุผล: 'สร้าง' ConfigMap ingress-nginx/ingress-nginx-tcp-services
I0327 19:53:47.756010 8 event.go:282] เหตุการณ์ (v1.ObjectReference{ชนิด:"ConfigMap", เนมสเปซ:"ingress-nginx", ชื่อ:"ingress-nginx-udp-services", UID:"fa04d653- a070-4934-a606-a60a7f98ad6a", APIVersion:"v1", ResourceVersion:"103400812", FieldPath:""}): ประเภท: 'ปกติ' เหตุผล: 'สร้าง' ConfigMap ingress-nginx/ingress-nginx-udp-services
I0327 19:53:47.756196 8 event.go:282] เหตุการณ์ (v1.ObjectReference{ชนิด:"ConfigMap", เนมสเปซ:"ingress-nginx", ชื่อ:"ingress-nginx-nginx-configuration", UID:"3af77ed0- e71c-49e9-bac3-b7c3fada40df", APIVersion:"v1", ResourceVersion:"103400808", FieldPath:""}): ประเภท: 'ปกติ' เหตุผล: 'สร้าง' ConfigMap ingress-nginx/ingress-nginx-nginx-configuration
E0327 19:53:48.844980 8 reflector.go:138] k8s.io/[email protected]/tools/cache/reflector.go:167: ไม่สามารถดู *v1beta1.Ingress: ไม่สามารถแสดงรายการ *v1beta1.Ingress : เซิร์ฟเวอร์ไม่พบทรัพยากรที่ร้องขอ
E0327 19:53:50.385656 8 reflector.go:138] k8s.io/[email protected]/tools/cache/reflector.go:167: ไม่สามารถดู *v1beta1.Ingress: ไม่สามารถแสดงรายการ *v1beta1.Ingress : เซิร์ฟเวอร์ไม่พบทรัพยากรที่ร้องขอ
E0327 19:53:52.811461 8 reflector.go:138] k8s.io/[email protected]/tools/cache/reflector.go:167: ไม่สามารถดู *v1beta1.Ingress: ไม่สามารถแสดงรายการ *v1beta1.Ingress : เซิร์ฟเวอร์ไม่พบทรัพยากรที่ร้องขอ
E0327 19:53:57.052727 8 reflector.go:138] k8s.io/[email protected]/tools/cache/reflector.go:167: ไม่สามารถดู *v1beta1.Ingress: ไม่สามารถแสดงรายการ *v1beta1.Ingress : เซิร์ฟเวอร์ไม่พบทรัพยากรที่ร้องขอ
E0327 19:54:05.784219 8 reflector.go:138] k8s.io/[email protected]/tools/cache/reflector.go:167: ไม่สามารถดู *v1beta1.Ingress: ไม่สามารถแสดงรายการ *v1beta1.Ingress : เซิร์ฟเวอร์ไม่พบทรัพยากรที่ร้องขอ
I0327 19:54:26.690574 8 main.go:187] "ได้รับ SIGTERM กำลังปิด"
I0327 19:54:26.690593 8 nginx.go:372] "กำลังปิดคิวคอนโทรลเลอร์"
E0327 19:54:26.690778 8 store.go:178] หมดเวลารอให้แคชซิงค์
I0327 19:54:26.690835 8 nginx.go:296] "กำลังเริ่มกระบวนการ NGINX"
I0327 19:54:26.691321 8 Queue.go:78] "คิวถูกปิด ไม่สามารถเข้าคิว" key="&ObjectMeta{Name:initial-sync,GenerateName:,Namespace:,SelfLink:,UID:,ResourceVersion:,Generation :0,CreationTimestamp:0001-01-01 00:00:00 +0000 UTC,DeletionTimestamp:<nil>,DeletionGracePeriodSeconds:nil,Labels:map[string]string{},Annotations:map[string]string{},OwnerReferences :[]OwnerReference{},Finalizers:[],ClusterName:,ManagedFields:[]ManagedFieldsEntry{},}"
I0327 19:54:26.691353 8 leaderelection.go:243] พยายามที่จะได้ผู้นำการเช่า ingress-nginx/ingress-controller-leader-nginx...
I0327 19:54:26.718477 8 status.go:84] "เลือกผู้นำคนใหม่แล้ว" identity="ingress-nginx-controller-72b9j"
I0327 19:54:26.733451 8 nginx.go:388] "หยุดกระบวนการ NGINX"
2022/03/27 19:54:26 [ประกาศ] 28#28: เริ่มกระบวนการสัญญาณ
I0327 19:54:27.738884 8 nginx.go:401] "กระบวนการ NGINX หยุดทำงาน"
I0327 19:54:27.738926 8 main.go:195] "จัดการออก กำลังรอการลบ Pod"
I0327 19:54:37.739197 8 main.go:198] "กำลังออก" รหัส=0
ยินดีให้รายละเอียดอื่นๆ ที่เป็นประโยชน์ ฉันขอขอบคุณความช่วยเหลือล่วงหน้า!
แก้ไข:
คลัสเตอร์อยู่บน AWS และสร้างโดยใช้คำสั่ง k0ps ต่อไปนี้
kops สร้างคลัสเตอร์ --node-count 2 --node-size t2.medium --zones ap-southeast-2a,ap-southeast-2c --master-size t2.small --master-zones ap-southeast-2c - -master-count 1 --networking=calico --authorization RBAC -o yaml --dry-run > my-cluster.yaml