You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by gy...@apache.org on 2022/03/08 06:54:59 UTC

[flink-kubernetes-operator] branch main updated: [FLINK-26508] Webhook should only validate on /validate endpoint end log errors for others

This is an automated email from the ASF dual-hosted git repository.

gyfora pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/flink-kubernetes-operator.git


The following commit(s) were added to refs/heads/main by this push:
     new b75c058  [FLINK-26508] Webhook should only validate on /validate endpoint end log errors for others
b75c058 is described below

commit b75c05807e43129016741277f16ca78634f1e423
Author: SteNicholas <pr...@163.com>
AuthorDate: Mon Mar 7 22:00:37 2022 +0800

    [FLINK-26508] Webhook should only validate on /validate endpoint end log errors for others
---
 .../operator/admission/AdmissionHandler.java       | 34 ++++++++++++++++------
 1 file changed, 25 insertions(+), 9 deletions(-)

diff --git a/flink-kubernetes-webhook/src/main/java/org/apache/flink/kubernetes/operator/admission/AdmissionHandler.java b/flink-kubernetes-webhook/src/main/java/org/apache/flink/kubernetes/operator/admission/AdmissionHandler.java
index a70b2af..7324786 100644
--- a/flink-kubernetes-webhook/src/main/java/org/apache/flink/kubernetes/operator/admission/AdmissionHandler.java
+++ b/flink-kubernetes-webhook/src/main/java/org/apache/flink/kubernetes/operator/admission/AdmissionHandler.java
@@ -37,11 +37,14 @@ import org.apache.flink.shaded.netty4.io.netty.handler.codec.http.HttpResponse;
 import org.apache.flink.shaded.netty4.io.netty.handler.codec.http.HttpResponseStatus;
 import org.apache.flink.shaded.netty4.io.netty.handler.codec.http.HttpVersion;
 import org.apache.flink.shaded.netty4.io.netty.handler.codec.http.LastHttpContent;
+import org.apache.flink.shaded.netty4.io.netty.handler.codec.http.QueryStringDecoder;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
 import io.fabric8.kubernetes.api.model.admission.v1.AdmissionReview;
 import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.annotation.Nonnull;
 
@@ -56,7 +59,9 @@ import static org.apache.flink.shaded.netty4.io.netty.handler.codec.http.HttpVer
 /** Rest endpoint for validation requests. */
 @ChannelHandler.Sharable
 public class AdmissionHandler extends SimpleChannelInboundHandler<HttpRequest> {
+    private static final Logger LOG = LoggerFactory.getLogger(AdmissionHandler.class);
     private static final ObjectMapper objectMapper = new ObjectMapper();
+    private static final String VALIDATE_REQUEST_PATH = "/validate";
 
     private final AdmissionController<GenericKubernetesResource> validatingController;
 
@@ -66,15 +71,26 @@ public class AdmissionHandler extends SimpleChannelInboundHandler<HttpRequest> {
 
     @Override
     protected void channelRead0(ChannelHandlerContext ctx, HttpRequest httpRequest) {
-        final ByteBuf msgContent = ((FullHttpRequest) httpRequest).content();
-        AdmissionReview review;
-        try {
-            InputStream in = new ByteBufInputStream(msgContent);
-            review = objectMapper.readValue(in, AdmissionReview.class);
-            AdmissionReview response = validatingController.handle(review);
-            sendResponse(ctx, objectMapper.writeValueAsString(response));
-        } catch (Exception e) {
-            sendError(ctx, ExceptionUtils.getStackTrace(e));
+        QueryStringDecoder decoder = new QueryStringDecoder(httpRequest.uri());
+        String path = decoder.path();
+        if (VALIDATE_REQUEST_PATH.equals(path)) {
+            final ByteBuf msgContent = ((FullHttpRequest) httpRequest).content();
+            AdmissionReview review;
+            try {
+                InputStream in = new ByteBufInputStream(msgContent);
+                review = objectMapper.readValue(in, AdmissionReview.class);
+                AdmissionReview response = validatingController.handle(review);
+                sendResponse(ctx, objectMapper.writeValueAsString(response));
+            } catch (Exception e) {
+                sendError(ctx, ExceptionUtils.getStackTrace(e));
+            }
+        } else {
+            String error =
+                    String.format(
+                            "Illegal path requested: %s. Only %s is accepted.",
+                            path, VALIDATE_REQUEST_PATH);
+            LOG.error(error);
+            sendError(ctx, error);
         }
     }