Kubernetes: добавить внутренний IP-адрес в среду - PullRequest
0 голосов
/ 11 января 2020

Для основного приложения. net мне нужен внутренний IP-адрес входа nginx, чтобы доверять прокси-серверу и обрабатывать его перенаправленные заголовки.

Это делается с помощью следующего кода в моем приложении :

forwardedHeadersOptions.KnownProxies.Add(IPAddress.Parse("10.244.0.16"));

Теперь это жестко запрограммировано. Но как я могу получить этот IP-адрес в переменную окружения для моего контейнера?

Кажется, что данный IP-адрес является конечной точкой службы ingress-nginx в пространстве имен ingress-nginx:

❯ kubectl describe service ingress-nginx -n ingress-nginx
Name:                     ingress-nginx
Namespace:                ingress-nginx
Labels:                   app.kubernetes.io/name=ingress-nginx
                          app.kubernetes.io/part-of=ingress-nginx
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"ingress-nginx","app.kubernetes.io/par...
Selector:                 app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/part-of=ingress-nginx
Type:                     LoadBalancer
IP:                       10.0.91.124
LoadBalancer Ingress:     40.127.224.177
Port:                     http  80/TCP
TargetPort:               http/TCP
NodePort:                 http  30756/TCP
Endpoints:                10.244.0.16:80
Port:                     https  443/TCP
TargetPort:               https/TCP
NodePort:                 https  31719/TCP
Endpoints:                10.244.0.16:443
Session Affinity:         None
External Traffic Policy:  Local
HealthCheck NodePort:     32003
Events:                   <none>

К вашему сведению: это мое развертывание:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: uwgazon-web
spec:
  replicas: 1
  paused: true
  template:
    metadata:
      labels:
        app: uwgazon-web
    spec:
      containers:
      - name: uwgazon-web
        image: uwgazon/web
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "128Mi"
            cpu: "250m"
          limits:
            memory: "256Mi"
            cpu: "500m"
        env:
        - name: UWGAZON_RECAPTCHA__SITEKEY
          valueFrom:
            secretKeyRef:
              name: uwgazon-recaptcha
              key: client-id
        - name: UWGAZON_RECAPTCHA__SERVERKEY
          valueFrom:
            secretKeyRef:
              name: uwgazon-recaptcha
              key: client-secret
        - name: UWGAZON_MAILGUN__BASEADDRESS
          valueFrom:
            secretKeyRef:
              name: uwgazon-mailgun
              key: base-address
        - name: UWGAZON_APPLICATIONINSIGHTS__INSTRUMENTATIONKEY
          valueFrom:
            secretKeyRef:
              name: uwgazon-appinsights
              key: instrumentationkey
        - name: APPINSIGHTS_INSTRUMENTATIONKEY
          valueFrom:
            secretKeyRef:
              name: uwgazon-appinsights
              key: instrumentationkey
        - name: UWGAZON_MAILGUN__APIKEY
          valueFrom:
            secretKeyRef:
              name: uwgazon-mailgun
              key: api-key
        - name: UWGAZON_MAILGUN__TOADDRESS
          valueFrom:
            secretKeyRef:
              name: uwgazon-mailgun
              key: to-address
        - name: UWGAZON_BLOG__NAME
          valueFrom:
            configMapKeyRef:
              name: uwgazon-config
              key: sitename
        - name: UWGAZON_BLOG__OWNER
          valueFrom:
            configMapKeyRef:
              name: uwgazon-config
              key: owner
        - name: UWGAZON_BLOG__DESCRIPTION
          valueFrom:
            configMapKeyRef:
              name: uwgazon-config
              key: description

И моя входная конфигурация

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: uwgazon-web-ingress
  annotations:
    cert-manager.io/issuer: "uwgazon-tls-issuer"
spec:
  tls:
  - hosts:
    - uwgazon.sdsoftware.be
    secretName: uwgazon-sdsoftware-be-tls
  rules:
  - host: uwgazon.sdsoftware.be
    http:
      paths:
      - backend:
          serviceName: uwgazon-web
          servicePort: 80

1 Ответ

1 голос
/ 12 января 2020

Я нашел решение этой проблемы, указав c для Asp. net ядра.

Прежде всего, вы ДОЛЖНЫ включить в белый список прокси-сервер, иначе промежуточное программное обеспечение переадресованных заголовков не будет работать.

Я обнаружил, что вы можете фактически внести белый список в целую сеть. Таким образом, вы доверяете всему внутри своего кластера. Kubernetes использует сеть 10.0.0.0/8 (su bnet mask 0.255.255.255). Доверяя этому, можно сделать следующий код:

services.Configure<ForwardedHeadersOptions>(forwardedHeadersOptions =>
{
    forwardedHeadersOptions.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    forwardedHeadersOptions.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("10.0.0.0"), 8));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...