MCP HubMCP Hub
SKILL·D7600D

configure-ingress-networking

pjt222
업데이트됨 1 month ago
9 조회
26
3
26
GitHub에서 보기
기타aiautomation

정보

이 스킬은 NGINX Ingress Controller를 사용하여 Kubernetes 인그레스 네트워킹을 구성하고, cert-manager를 통해 TLS 인증서 관리를 자동화합니다. 경로/호스트 기반 라우팅, 속도 제한, 다중 도메인 호스팅, SSL 종료, 그리고 여러 서비스를 노출하기 위한 로드 밸런싱을 가능하게 합니다. 블루-그린/카나리 배포를 위한 트래픽 분할을 구현하고 Let's Encrypt 인증서 발급을 자동화하는 데 사용하세요.

빠른 설치

Claude Code

추천
기본
npx skills add pjt222/agent-almanac -a claude-code
플러그인 명령대체
/plugin add https://github.com/pjt222/agent-almanac
Git 클론대체
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/configure-ingress-networking

Claude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요

문서


name: configure-ingress-networking description: > Kubernetes-Ingress-Networking mit NGINX-Ingress-Controller, cert-manager fuer automatisiertes TLS-Zertifikat-Management, pfadbasiertes Routing, Rate-Limiting und Multi-Domain-Hosting mit SSL-Terminierung und Load-Balancing konfigurieren. Einsatz beim Exponieren mehrerer Kubernetes-Services ueber einen einzelnen Load-Balancer, beim Implementieren von pfad- oder hostbasiertem Routing, beim Automatisieren der TLS- Zertifikatausstellung mit Let's Encrypt oder beim Einrichten von Blue-Green- und Canary-Deployments mit Traffic-Splitting. locale: de source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: devops complexity: intermediate language: multi tags: ingress, nginx, cert-manager, tls, networking

Ingress-Networking konfigurieren

Produktionstaugliches Kubernetes-Ingress mit NGINX-Controller, automatisierten TLS-Zertifikaten und erweiterten Routing-Funktionen einrichten.

Wann verwenden

  • Mehrere Kubernetes-Services ueber einen einzelnen Load-Balancer exponieren
  • Pfad- oder hostbasiertes Routing fuer Microservices implementieren
  • TLS-Zertifikatausstellung und -Erneuerung mit Let's Encrypt automatisieren
  • Rate-Limiting, Authentifizierung und WAF-Richtlinien implementieren
  • Blue-Green- oder Canary-Deployments mit Traffic-Splitting einrichten
  • Benutzerdefinierte Fehlerseiten und Anfrage-/Antwort-Modifikation konfigurieren

Eingaben

  • Erforderlich: Kubernetes-Cluster mit LoadBalancer-Unterstuetzung oder MetalLB
  • Erforderlich: DNS-Eintraege, die auf die Cluster-LoadBalancer-IP zeigen
  • Optional: Vorhandene TLS-Zertifikate oder Let's-Encrypt-Konto
  • Optional: OAuth2-Provider fuer Authentifizierung
  • Optional: WAF-Regeln (ModSecurity)
  • Optional: Prometheus fuer Metriken-Erfassung

Vorgehensweise

Siehe Erweiterte Beispiele fuer vollstaendige Konfigurationsdateien und Vorlagen.

Schritt 1: NGINX-Ingress-Controller installieren

NGINX-Ingress-Controller mit Helm deployen und Cloud-Provider-Integration konfigurieren.

# Add NGINX Ingress Helm repository
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

# Create namespace
kubectl create namespace ingress-nginx

# Install for cloud providers (AWS, GCP, Azure)
helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.service.type=LoadBalancer \
  --set controller.metrics.enabled=true \
  --set controller.metrics.serviceMonitor.enabled=true \
  --set controller.podAnnotations."prometheus\.io/scrape"=true \
  --set controller.podAnnotations."prometheus\.io/port"=10254

# Or install for bare-metal with NodePort
helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.service.type=NodePort \
  --set controller.service.nodePorts.http=30080 \
  --set controller.service.nodePorts.https=30443

# AWS-specific configuration with NLB
helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-type"=nlb \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-backend-protocol"=tcp \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-cross-zone-load-balancing-enabled"=true

# Verify installation
kubectl get pods -n ingress-nginx
kubectl get svc -n ingress-nginx

# Wait for LoadBalancer external IP
kubectl get svc ingress-nginx-controller -n ingress-nginx -w

# Get external IP/hostname
INGRESS_IP=$(kubectl get svc ingress-nginx-controller -n ingress-nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
INGRESS_HOST=$(kubectl get svc ingress-nginx-controller -n ingress-nginx -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')

echo "Ingress IP: $INGRESS_IP"
echo "Ingress Hostname: $INGRESS_HOST"

# Test controller
curl http://$INGRESS_IP
# Should return 404 (no backend configured yet)

Erwartet: NGINX-Ingress-Controller-Pods laufen im ingress-nginx-Namespace. LoadBalancer-Service hat externe IP zugewiesen. Metriken-Endpunkt auf Port 10254 erreichbar. Health-Check unter /healthz liefert 200 OK.

Bei Fehler: Bei ausstehendem LoadBalancer Cloud-Provider-Integration und Service-Kontingente pruefen. Bei CrashLoopBackOff Controller-Logs mit kubectl logs -n ingress-nginx -l app.kubernetes.io/component=controller pruefen. Bei Webhook-Fehlern pruefen, ob Admission-Webhook-Zertifikat gueltig ist. Bei fehlender externer IP auf Bare-Metal MetalLB installieren oder NodePort-Service-Typ verwenden.

Schritt 2: cert-manager fuer automatisiertes TLS installieren

cert-manager deployen und Let's-Encrypt-ClusterIssuer konfigurieren.

# Install cert-manager CRDs
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.crds.yaml

# Add cert-manager Helm repository
helm repo add jetstack https://charts.jetstack.io
helm repo update

# Install cert-manager
helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.13.0 \
  --set prometheus.enabled=true \
  --set webhook.timeoutSeconds=30

# Verify installation
kubectl get pods -n cert-manager
kubectl get apiservice v1beta1.webhook.cert-manager.io -o yaml

# Create Let's Encrypt staging issuer (for testing)
cat <<EOF | kubectl apply -f -
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-staging-account-key
    solvers:
    - http01:
        ingress:
          class: nginx
EOF

# Create Let's Encrypt production issuer
cat <<EOF | kubectl apply -f -
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-prod-account-key
    solvers:
    - http01:
        ingress:
          class: nginx
    - dns01:
        route53:
          region: us-east-1
          hostedZoneID: Z1234567890ABC
          # IAM role for EKS with IRSA
          role: arn:aws:iam::123456789012:role/cert-manager
EOF

# Verify ClusterIssuer ready
kubectl get clusterissuer
kubectl describe clusterissuer letsencrypt-prod

Erwartet: cert-manager-Pods laufen im cert-manager-Namespace. ClusterIssuers mit Ready-Status erstellt. ACME-Konto bei Let's Encrypt registriert. Webhook beantwortet Zertifikat-Anfragen.

Bei Fehler: Bei Webhook-Timeout-Fehlern webhook.timeoutSeconds erhoehen oder Netzwerkrichtlinien pruefen, die cert-manager zum API-Server blockieren. Bei ACME-Registrierungsfehlern pruefen, ob E-Mail-Adresse gueltig und Server-URL korrekt ist. Bei DNS01-Fehlern pruefen, ob Route53-IAM-Berechtigungen route53:ChangeResourceRecordSets erlauben.

Schritt 3: Einfaches Ingress mit TLS erstellen

Anwendung deployen und per Ingress mit automatischer Zertifikatausstellung exponieren.

# Deploy sample application
kubectl create deployment web --image=nginx:alpine
kubectl expose deployment web --port=80 --target-port=80

# Create Ingress resource with TLS
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-staging"  # Use staging for testing
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - web.example.com
    secretName: web-tls-secret  # cert-manager will create this
  rules:
  - host: web.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web
            port:
              number: 80
EOF

# Watch certificate creation
kubectl get certificate -w
kubectl describe certificate web-tls-secret

# Verify certificate issued
kubectl get secret web-tls-secret
kubectl get secret web-tls-secret -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -noout

# Check cert-manager logs if issues
kubectl logs -n cert-manager -l app=cert-manager -f

# Test HTTP to HTTPS redirect
curl -I http://web.example.com
# Should return 308 Permanent Redirect to https://

# Test HTTPS
curl -v https://web.example.com
# Should return 200 OK with valid certificate

# Once tested successfully, switch to production issuer
kubectl patch ingress web-ingress -p '{"metadata":{"annotations":{"cert-manager.io/cluster-issuer":"letsencrypt-prod"}}}'
kubectl delete certificate web-tls-secret
kubectl delete secret web-tls-secret
# cert-manager will recreate with production certificate

Erwartet: Ingress-Ressource erstellt. cert-manager erkennt Annotation und erstellt Certificate-Ressource. HTTP-01-Challenge erfolgreich abgeschlossen. TLS-Secret mit gueltigem Zertifikat erstellt. HTTPS-Anfragen erfolgreich mit vertrauenswuerdigem Zertifikat. HTTP leitet zu HTTPS weiter.

Bei Fehler: Bei Challenge-Fehlern pruefen, ob DNS auf Ingress-LoadBalancer-IP zeigt (dig web.example.com). Bei Rate-Limit-Fehlern Staging-Issuer verwenden, bis Konfiguration korrekt ist. Bei nicht ausgestelltem Zertifikat Ereignisse mit kubectl describe certificate web-tls-secret und kubectl get challenges pruefen.

Schritt 4: Erweitertes Routing und Load-Balancing implementieren

Pfadbasiertes Routing, Header-basiertes Routing und Traffic-Splitting konfigurieren.

# Deploy multiple services
kubectl create deployment api --image=hashicorp/http-echo --replicas=3 -- -text="API Service"
kubectl create deployment admin --image=hashicorp/http-echo --replicas=2 -- -text="Admin Service"
kubectl expose deployment api --port=5678
kubectl expose deployment admin --port=5678

# Create Ingress with path-based routing
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/rewrite-target: /\$2
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - app.example.com
    secretName: app-tls
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web
            port:
              number: 80
      - path: /api(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: api
            port:
              number: 5678
      - path: /admin(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: admin
            port:
              number: 5678
EOF

# Canary deployment with traffic splitting
kubectl create deployment api-v2 --image=hashicorp/http-echo -- -text="API Service v2"
kubectl expose deployment api-v2 --port=5678

cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: api-canary
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "20"  # 20% traffic to v2
spec:
  ingressClassName: nginx
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-v2
            port:
              number: 5678
EOF

# Header-based canary routing (for testing)
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: api-canary-header
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-by-header: "X-Canary"
    nginx.ingress.kubernetes.io/canary-by-header-value: "always"
spec:
  ingressClassName: nginx
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-v2
            port:
              number: 5678
EOF

# Test routing
curl https://app.example.com/            # -> web service
curl https://app.example.com/api/        # -> 80% api, 20% api-v2
curl https://app.example.com/admin/      # -> admin service
curl -H "X-Canary: always" https://app.example.com/api/  # -> api-v2 (100%)

Erwartet: Einzelner Ingress leitet basierend auf Pfad an mehrere Services weiter. Rewrite-Target entfernt Pfad-Praefix. Canary-Ingress teilt Traffic nach Gewicht auf. Header-basiertes Routing sendet spezifische Anfragen an Canary. TLS terminiert am Ingress, Backends verwenden HTTP.

Bei Fehler: Bei 404-Fehlern Service-Namen und Ports pruefen. Bei Rewrite-Problemen Regex mit nginx.ingress.kubernetes.io/rewrite-target-Debugger testen. Bei nicht funktionierendem Canary pruefen, ob nur ein Ingress canary: "false" (Haupt) und andere canary: "true" haben.

Schritt 5: Rate-Limiting und Authentifizierung konfigurieren

Rate-Limiting, Basic-Auth und OAuth2-Authentifizierung implementieren.

# Rate limiting by IP
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: api-ratelimit
# ... (see EXAMPLES.md for complete configuration)

Erwartet: Rate-Limiting blockiert uebermassige Anfragen mit 503 Service Temporarily Unavailable. Basic-Auth fordert Credentials an und lehnt nicht autorisierte Anfragen ab. OAuth2 leitet zur Provider-Anmeldeseite weiter und setzt Authentifizierungs-Cookies.

Bei Fehler: Bei nicht funktionierendem Rate-Limit Annotation-Syntax pruefen und Ingress-Controller-Pods neu starten. Bei Basic-Auth-500-Fehlern Secret-Format mit kubectl get secret basic-auth -o yaml | grep auth: pruefen. Bei OAuth2-Fehlern pruefen, ob Client-ID/Secret und Callback-URL beim Provider registriert sind.

Schritt 6: Benutzerdefinierte Fehlerseiten und Anfrage-Modifikation implementieren

Benutzerdefinierte Fehlerseiten, CORS und Anfrage-/Antwort-Header konfigurieren.

# Create ConfigMap with custom error pages
kubectl create configmap custom-errors --from-file=404.html --from-file=503.html -n ingress-nginx

# Configure NGINX to use custom error pages
cat <<EOF | kubectl apply -f -
apiVersion: v1
# ... (see EXAMPLES.md for complete configuration)

Erwartet: Benutzerdefinierte 404- und 503-Seiten werden statt Standard-NGINX-Seiten angezeigt. CORS-Header erlauben angegebene Origins und Methoden. Sicherheits-Header schuetzen vor XSS und Clickjacking. Anfrage-Groessenlimit erlaubt grosse Datei-Uploads. Timeout-Einstellungen verhindern vorzeitiges Verbindungsschliessen.

Bei Fehler: Bei nicht angezeigten benutzerdefinierten Fehlerseiten pruefen, ob ConfigMap in Controller-Pods gemountet und Standard-Backend deployed ist. Bei CORS-Preflight-Fehlern pruefen, ob OPTIONS-Anfragen im Backend-Service erlaubt sind. Bei 413 Request Entity Too Large proxy-body-size-Annotation erhoehen.

Validierung

  • NGINX-Ingress-Controller laeuft mit zugewiesener externer IP
  • cert-manager stellt Zertifikate automatisch per Let's Encrypt aus
  • HTTPS-Weiterleitungen erzwingen SSL fuer alle Ingresses
  • Pfadbasiertes Routing leitet Anfragen an korrekte Backend-Services
  • Canary-Ingresses teilen Traffic gemaess Gewichts-Annotationen auf
  • Rate-Limiting blockiert uebermassige Anfragen von einzelner IP
  • Authentifizierung (Basic-Auth oder OAuth2) schuetzt Admin-Routen
  • Benutzerdefinierte Fehlerseiten erscheinen bei 404/503-Fehlern
  • CORS-Header erlauben Cross-Origin-Anfragen von angegebenen Domains
  • Metriken-Endpunkt exponiert Prometheus-Metriken fuer Monitoring

Haeufige Stolperfallen

  • Kein ingressClassName: Ingress wird nicht vom Controller aufgenommen. Immer ingressClassName: nginx in Kubernetes 1.19+ angeben.

  • Zertifikat-Challenges fehlschlagen: DNS zeigt nicht auf Ingress-LoadBalancer. Mit dig yourdomain.com pruefen, bevor Zertifikat angefordert wird.

  • HTTP-01-Challenge-Timeout: Firewall blockiert Port 80. Let's Encrypt muss http://domain/.well-known/acme-challenge/ fuer Validierung erreichen koennen.

  • Rate-Limit gilt global: limit-rps-Annotation gilt pro Ingress, nicht pro Pfad. Separate Ingresses fuer unterschiedliche Rate-Limits erstellen.

  • Rewrite-Target-Regex falsch: Captures passen nicht zum Pfad-Muster. Mit echo "/api/users" | sed 's|/api(/\|$)\(.*\)|/\2|' testen.

  • Canary-Gewicht ignoriert: Mehrere Canary-Ingresses fuer denselben Host/Pfad konfliktieren. Nur einen Canary-Ingress pro Route erstellen.

  • Auth-Bypass per IP: Authentifizierung nur am Ingress, Backend-Services per ClusterIP erreichbar. Netzwerkrichtlinien oder Service-Mesh implementieren.

  • Configuration-Snippet-Injection-Risiko: Benutzereingaben in configuration-snippet ermoeglichen NGINX-Config-Injection. Alle Annotationen validieren und bereinigen.

Verwandte Skills

  • deploy-to-kubernetes - Services erstellen, an die Ingress weiterleitet
  • manage-kubernetes-secrets - TLS-Zertifikate als Secrets verwalten
  • implement-gitops-workflow - Deklaratives Ingress-Management mit Argo CD
  • setup-service-mesh - Erweitertes Traffic-Management mit Istio/Linkerd
  • build-ci-cd-pipeline - Automatisierte Ingress-Updates in CI/CD

GitHub 저장소

pjt222/agent-almanac
경로: i18n/de/skills/configure-ingress-networking
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams
FAQ

Frequently asked questions

What is the configure-ingress-networking skill?

configure-ingress-networking is a Claude Skill by pjt222. Skills package instructions and resources that Claude loads on demand, so Claude can perform configure-ingress-networking-related tasks without extra prompting.

How do I install configure-ingress-networking?

Use the install commands on this page: add configure-ingress-networking to Claude Code as a plugin, or clone its repository into your skills directory, then restart Claude so it picks up the skill.

What category does configure-ingress-networking belong to?

configure-ingress-networking is in the Other category, tagged ai and automation.

Is configure-ingress-networking free to use?

Yes. configure-ingress-networking is listed on AIMCP and free to install. It runs inside Claude, so no separate service account is required to use the skill itself.

연관 스킬

llamaguard
기타

LlamaGuard는 폭력 및 혐오 발언 등 6가지 안전 범주에서 LLM 입력과 출력을 조정하기 위한 Meta의 70-80억 파라미터 모델입니다. 94-95% 정확도를 제공하며 vLLM, Hugging Face 또는 Amazon SageMaker를 사용해 배포할 수 있습니다. 이 기술을 사용하여 AI 애플리케이션에 콘텐츠 필터링 및 안전 가드레일을 손쉽게 통합하세요.

스킬 보기
cost-optimization
기타

이 Claude Skill은 리소스 적정화, 태깅 전략, 지출 분석을 통해 개발자들이 클라우드 비용을 최적화할 수 있도록 지원합니다. AWS, Azure, GCP에서 클라우드 비용을 절감하고 비용 거버넌스를 구현하기 위한 프레임워크를 제공합니다. 인프라 비용을 분석하거나, 리소스를 적정화하거나, 예산 제약을 충족해야 할 때 사용하세요.

스킬 보기
sports-betting-analyzer
기타

이 Claude Skill은 스프레드, 오버/언더, 프로프 베트를 포함한 스포츠 베팅 시장을 분석합니다. 역사적 추이와 상황별 통계를 검토하여 가치 베트를 발견하고, 교육적 목적으로 실행 가능한 권장 사항이 담긴 구조화된 마크다운 결과를 제공합니다. 개발자는 이 기능을 스포츠 베팅 분석 도구에 활용할 수 있으며, 단순히 엔터테인먼트/교육 목적으로만 설계되었음을 유의해야 합니다.

스킬 보기
quantizing-models-bitsandbytes
기타

이 스킬은 bitsandbytes를 사용하여 LLM을 8비트 또는 4비트 정밀도로 양자화하며, 최소한의 정확도 손실로 50-75%의 메모리 감소를 달성합니다. 제한된 GPU 메모리에서 더 큰 모델을 실행하거나 추론을 가속화하는 데 이상적이며, INT8, NF4, FP4와 같은 형식을 지원합니다. 이 스킬은 HuggingFace Transformers와 통합되어 QLoRA 학습 및 8비트 옵티마이저를 가능하게 합니다.

스킬 보기