Hi, I have exactly the same issue, did you find any solution ? Thank you
Le vendredi 26 mai 2023 à 21:17:54 UTC+2, sanjay...@google.com a écrit : > I looked at the logs and I can confirm that the client is not using mTLS > because Istio didn't provide the right configuration. Let me explain: > > From your server-mtls-strict.log I see this > > "transportSocket": { > "name": "envoy.transport_sockets.tls", > "typedConfig": { > "@type": " > type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext > ", > "commonTlsContext": { > "combinedValidationContext": { > "defaultValidationContext": { > }, > "validationContextCertificateProviderInstance": { > "instanceName": "default", > "certificateName": "ROOTCA" > } > }, > "tlsCertificateCertificateProviderInstance": { > "instanceName": "default", > "certificateName": "default" > } > }, > "requireClientCertificate": true > } > }, > "name": "inbound-mtls" > > In the Listener resource received (see timestamp 16:47:54.070) > > However I don't see a similar security configuration on the client side - > which is a bit complex I admin. In the client-mtls-strict.log I see a > Cluster resource response: > > { > "versionInfo": "2023-05-26T16:47:41Z/749", > "resources": [{ > "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", > "name": "outbound|8443||server.kotlin-grpc-xds.svc.cluster.local", > "type": "EDS", > "edsClusterConfig": { > "edsConfig": { > "ads": { > } > }, > "serviceName": > "outbound|8443||server.kotlin-grpc-xds.svc.cluster.local" > } > }], > "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", > "nonce": "bd0fe5d1-9cb8-4342-a15f-d5d834dd3255", > "controlPlane": { > "identifier": > "{\"Component\":\"istiod\",\"ID\":\"istiod-7fd9d6dd48-nf42k\",\"Info\":{\"version\":\"1.17.2\",\"revision\":\"3e857775086a061d12ee445f32a0b35ea17c8488\",\"golang_version\":\"go1.20.2\",\"status\":\"Clean\",\"tag\":\"1.17.2\"}}" > } > } > > which has no security/mTLS configuration. I would expect a config similar > to the transportSocket snippet I described above. > > So the error is on the Istio side: whether a bug in Istio or a user-error > I can't tell. I hope you are able to figure it out? > > > > On Friday, May 26, 2023 at 10:53:34 AM UTC-7 Wesley Hartford wrote: > >> I've attached a copy of the log files with xds logging set to trace for >> an execution of the client and server with istio's mtls mode set to STRICT >> and PERMISSIVE. My interpretation of these logs is: >> >> In PERMISSIVE mode, neither client nor server is trying to use any type >> of TLS; they're both using plain text and can interact just fine. I was >> under the impression that PERMISSIVE mode would use mTLS, but reading the >> istio docs, it's a little ambiguous, so I guess this is a correct behaviour. >> >> In STRICT mode, it looks like the server is using the supplied TLS key >> material to accept mTLS connections, but it doesn't look like the client is >> making any attempt to use TLS. >> >> I'm working on your other suggestions, but thought I should update you >> with the logs before spending too much time on them. >> >> On Wed, May 24, 2023 at 11:22 PM Sanjay Pujare <sanjay...@google.com> >> wrote: >> >>> (adding grpc.io group back) >>> >>> On Wed, May 24, 2023 at 2:57 PM Wesley Hartford <wes...@cutterslade.ca> >>> wrote: >>> >>>> Hi, >>>> >>>> My suggestion that the connection was falling back to insecure was not >>>> evidence based, I'm still trying to wrap my head around how all this is >>>> working. >>>> >>> >>> Okay. >>> >>> >>>> >>>> The target address on the client side is using the xds:/// prefix. >>>> >>>> I've enabled trace level logging on the io.grpc.xds logger but I'm not >>>> seeing any additional log messages, have I missed something? I'm using >>>> slf4j and logback and have the SLF4JBridgeHandler installed. >>>> >>> >>> The code uses Java util logging so you can just something like >>> -Djava.util.logging.config.file=/logging.properties in your Java >>> invocation command line and enable the logger for io.grpc.xds . >>> >>> >>>> >>>> The grpc-bootstrap.json file seems reasonable, though I don't know just >>>> what it all means (I've attached the content). The three pem files >>>> referenced in certificate_providers point to real files containing >>>> apparently valid PEM content. >>>> >>>> You've mentioned a couple times enabling vs. disabling mTLS, are you >>>> referring to some specific setting on the client and/or server, or in >>>> istio >>>> somewhere? My understanding has been that with the Xds server and channel, >>>> both will use mTLS unless I specifically set the mtls mode to DISABLE in a >>>> PeerAuthentication resource, which I haven't done. I've experimented with >>>> mtls mode set to PERMISSIVE and STRICT. Is the problem something as simple >>>> as not enabling mTLS somewhere? >>>> >>> >>> In your first post you said "I got everything working without too much >>> trouble ... ... When I configure Istio to enforce STRICT mTLS..." I got >>> the impression that you got everything working in plaintext (without >>> enabling mTLS) and then you enabled mTLS via Istio which is when you saw >>> connection problems. I was just referring to the same - you enable mTLS in >>> Istio security policy. >>> >>> I suggest couple of additional tests to troubleshoot this: >>> >>> - instead of using Xds Channel and Server credentials use the Tls >>> Channel and Server credentials with the same files provided by Istio (under >>> /var/lib/istio/data). You can check out the doc at >>> https://grpc.github.io/grpc-java/javadoc/io/grpc/TlsChannelCredentials.html >>> and >>> https://grpc.github.io/grpc-java/javadoc/io/grpc/TlsServerCredentials.html >>> . Note that even if you are using XDS for load balancing, service discovery >>> you can use Tls credentials for security. >>> >>> - if you can try a Golang (or C++) example with your Istio setup and >>> verify mTLS is working with those examples. >>> >>> Hope that helps. >>> >>> >>> >>>> >>>> Thanks again, >>>> >>>> Wesley >>>> >>>> On Wed, May 24, 2023 at 10:27 AM 'sanjay...@google.com' via grpc.io < >>>> grp...@googlegroups.com> wrote: >>>> >>>>> On Wednesday, May 24, 2023 at 8:41:20 AM UTC-7 Wesley Hartford wrote: >>>>> >>>>> Thanks for getting back to me, Sanjay. As far as I can tell, my client >>>>> and server are both using the appropriate Xds credentials: >>>>> The client code is at >>>>> https://github.com/wfhartford/kotlin-grpc-xds/blob/18598a7e9210be7265bc753b136cb424d087ab77/client/src/main/kotlin/ca/cutterslade/kotlingrpcxds/client/main.kt#L26 >>>>> Grpc.newChannelBuilder(targetUrl, >>>>> XdsChannelCredentials.create(InsecureChannelCredentials.create())).build() >>>>> >>>>> The server code is at >>>>> https://github.com/wfhartford/kotlin-grpc-xds/blob/18598a7e9210be7265bc753b136cb424d087ab77/server/src/main/kotlin/ca/cutterslade/kotlingrpcxds/server/main.kt#L45 >>>>> XdsServerBuilder.forPort(8443, >>>>> XdsServerCredentials.create(InsecureServerCredentials.create())) >>>>> >>>>> The insecure credentials provided to both a fallback, and it looks >>>>> like the sample you linked is doing the same thing. >>>>> >>>>> >>>>> Yes, you are right - Xds credentials are being correctly used so >>>>> that's not an issue. >>>>> >>>>> I'm not sure why, but I'm guessing that the secure connection is >>>>> failing and it is falling back to insecure. >>>>> >>>>> >>>>> No, that cannot be the case. As described here >>>>> https://github.com/grpc/proposal/blob/master/A29-xds-tls-security.md#programming-api >>>>> >>>>> fallback credentials are *not* meant to be used when secure connection >>>>> fails. If you suspect that's happening can you provide some evidence >>>>> (logs >>>>> etc)? >>>>> >>>>> >>>>> Based on the example you linked, the only other requirement is that >>>>> the GRPC_XDS_BOOTSTRAP environment variable is set, which is being >>>>> done by the istio sidecar; kubectl describe pod shows that both the >>>>> client and server containers have two environment variables injected: >>>>> GRPC_XDS_EXPERIMENTAL_SECURITY_SUPPORT: true >>>>> GRPC_XDS_BOOTSTRAP: >>>>> /etc/istio/proxy/grpc-bootstrap.json >>>>> >>>>> >>>>> The bootstrap file (and the GRPC_XDS_BOOTSTRAP environment variable) >>>>> is required not just for security but overall XDS support. Based on your >>>>> observations in the first email it looks like client and server are able >>>>> to >>>>> communicate based on xds configuration so that part must be working. Just >>>>> to confirm your client did use the "xds:///" prefix to access your >>>>> service, >>>>> right? >>>>> >>>>> If you are certain that XDS is working for load balancing and >>>>> plaintext communication but breaks only when mTLS is enabled it might be >>>>> useful to enable debug logging on both client and server side (for the >>>>> io.grpc.xds package and below). >>>>> >>>>> Also you can check the contents of >>>>> /etc/istio/proxy/grpc-bootstrap.json esp. the certificate_providers >>>>> part and confirm that the 3 files provided in the config have valid >>>>> certificate material. Let me know if you need help debugging that part. >>>>> >>>>> >>>>> >>>>> There are only two warning lines being logged from both the client and >>>>> the server: >>>>> >>>>> 14:51:55.314 [main] WARN i.g.n.s.io.netty.bootstrap.Bootstrap - >>>>> Unknown channel option 'SO_KEEPALIVE' for channel '[id: 0xba433026]' >>>>> 14:51:55.314 [main] WARN i.g.n.s.io.netty.bootstrap.Bootstrap - >>>>> Unknown channel option >>>>> 'io.grpc.netty.shaded.io.netty.channel.epoll.EpollChannelOption#TCP_USER_TIMEOUT' >>>>> >>>>> for channel '[id: 0xba433026]' >>>>> >>>>> >>>>> I doubt this is an issue. Just to confirm you see these messages also >>>>> when mTLS is not enabled, right? >>>>> >>>>> >>>>> >>>>> Do you know of anything else I might be missing that is required for a >>>>> secure connection? >>>>> >>>>> Thanks, >>>>> >>>>> Wesley >>>>> >>>>> -- >>>>> You received this message because you are subscribed to a topic in the >>>>> Google Groups "grpc.io" group. >>>>> To unsubscribe from this topic, visit >>>>> https://groups.google.com/d/topic/grpc-io/e20VVBIPd7M/unsubscribe. >>>>> To unsubscribe from this group and all its topics, send an email to >>>>> grpc-io+u...@googlegroups.com. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/grpc-io/5a062461-2c73-4475-b99c-ddfe43a569e6n%40googlegroups.com >>>>> >>>>> <https://groups.google.com/d/msgid/grpc-io/5a062461-2c73-4475-b99c-ddfe43a569e6n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> -- You received this message because you are subscribed to the Google Groups "grpc.io" group. To unsubscribe from this group and stop receiving emails from it, send an email to grpc-io+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/grpc-io/1812e95f-ab1c-4f21-a17b-b42e458bd3d3n%40googlegroups.com.