Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add IPv6 Support #1756

Closed
ldemailly opened this issue Nov 16, 2017 · 35 comments
Closed

Add IPv6 Support #1756

ldemailly opened this issue Nov 16, 2017 · 35 comments

Comments

@ldemailly
Copy link
Contributor

@danehans commented on Mon Oct 30 2017

Is this a BUG or FEATURE REQUEST?:
FEATURE REQUEST

Did you review existing epics or issues to identify if this already being worked on?
Yes

Bug:
N

Feature Request:
Y

Describe the feature:
The Kubernetes community is in the process of adding IPv6 support and kubernetes/kubernetes#1443 is being used to track the effort. IPv6 alpha support is expected in the v1.9 Kubernetes release. As a user, I would like to manage my micro services using Istio running on Kubernetes IPv6 with the same or better capabilities than running on IPv4.

@andraxylia
Copy link
Contributor

Moving to un-assigned and adding help needed, to indicate to contributors nobody is working on it yet.

@andraxylia andraxylia removed their assignment Nov 23, 2017
@andraxylia andraxylia added this to the Nebulous Future milestone Nov 23, 2017
@burtonator
Copy link

What's needed to get this implemented. We would love to see IPv6 at Scalefastr as that works really well for our use case.

IPv6 is awesome when you have a whole /64 and plenty of IPs to work with on the host machine.

@costinm
Copy link
Contributor

costinm commented Dec 17, 2017 via email

@ldemailly
Copy link
Contributor Author

@pmichali
Copy link

pmichali commented Mar 9, 2018

Here are several issues that I created, based on my PoC work...

#4087 (code audit report)

#4095 #4096 #4097 #4098 #4100 Issues seen during effort to get IPv6 running

#4101 #4102 Sample apps

I'll be doing PRs soon for 4095-4097 as they are easy fixes :)

@spikecurtis
Copy link
Member

@pmichali I commented on one of the issues, but wanted to pull it up to the higher level. It is extremely desirable to not make the operator explicitly configure IPv4 vs IPv6. Naively, I'm assuming this is possible since considerable work went toward making them play nicely in the Linux kernel.

So, we should

  • include both IPv4 & IPv6 iptables rules for redirecting to Envoy by default
  • bind to IPv6 versions of wildcard and localhost, which accept IPv4 connections
  • configure remote cluster endpoints using whatever address format is offered up by the service registry (e.g. Kubernetes)

etc.

There may be some "gotchas" I don't know about that really require some operator config, but the goal should be zero Istio config changes to make this work.

@ldemailly
Copy link
Contributor Author

I added the 9 issues to the epic (epic only shows if you have zenhub addon)

@pmichali
Copy link

pmichali commented Mar 9, 2018

@spikecurtis I agree with the goals there. We need to verify that IPv6 addresses will work in IPv4 mode, especially when IPv6 is disabled on the host.

For the configurability, I was hoping that it could be done implicitly, by determining the IP mode possibly. I wouldn't want to see knobs, either.

@ldemailly
Copy link
Contributor Author

Not all ipv6 setup are configured to also bind to v4 when using v6; for most complete coverage you often have to listen twice

@zmlcc
Copy link

zmlcc commented Jun 14, 2018

I have tried to run istio in an ipv6-only kubernetes cluster recently. By some incompatible hard-coded modifications,istio/envoy really works.

To implicitly adapt both ipv4 and ipv6, there first should be a way to verify the host support ipv6 or not.
Does it make sense to determine it by the output of /proc/net/if_inet6 ?
The output is not empty If the host enables ipv6 and vice versa

However, even if we know the host support ipv6 automatically, it does not mean any services really run on ipv6 . On the system which may enable ipv6 support by default but only work on ipv4, we should not automatically config istio to run in dual stack mode.

So explicitly configuring IPv4 vs IPv6 may be necessary ? @pmichali @spikecurtis

@spikecurtis
Copy link
Member

@zmlcc I don't see the harm in Istio running dual stack, where available. Can you elaborate?

@zmlcc
Copy link

zmlcc commented Jun 15, 2018

@spikecurtis To run in dual stack, istio may require extra network abilities or add extra traffic rule (e.g. #5273), which are not necessary or expected for the operator.

For example, considering a dual stack cluster where the business traffic is running in ipv6 and the management traffic is in ipv4. Using istio to manage micro services in ipv6 is good, but the operator do not want istio effect anything abount ipv4 network (especially adding/deleting iptables rules).

Meanwhile, as ipv4/v6 services could not communicate directly, I think one alone service mesh rarely manage dual stack traffic as a whole (if needed, it could be seen as the ipv4 part and ipv6 part separately). So in most instances, running isito in single stack mode is enough and suitable.

I think we should leave the right to choose using istio in ipv4-only / ipv6-only / dual stack mode to the final operator. Even if itstio could run in dual stack by default, we could also keep the ability to manually disable ipv4/ipv6 functionality if we do not need at all.

@costinm
Copy link
Contributor

costinm commented Jun 15, 2018 via email

@mailzyok
Copy link

Hello,

Is there any place I can find the overall status for the IPv6 support? For example, is IPv6 support in gateway? What is the status of IPv6 for entire mesh?

Thanks,
zy

@eclipse612
Copy link

Hi,

+1 for Zy's question. I think it would be great to have a view of what are the different aspects needed for IPv6 support in the mesh and in gateways, and what's the status and priority for each of them.

I also think gateways are top prio, but at some point it should be possible to get fully IPv6 based meshes - I'm thinking of existing applications that are introducing Istio and don't necessarily want to change their L3 protocol because of that. My two cents.

Thanks in advance!

Stefano

@sbezverk
Copy link
Contributor

I am in the process of trying/making istio release 1.1 functioning on ipv6 only kubernetes cluster. It resulted a couple of PRs, one of them was merged and second one required reviews:
#11916
#11861
I am planning to go through the complete ipv6 deployment cycle as it is required by my customer.

@duderino
Copy link
Contributor

duderino commented Jun 18, 2019

@sbezverk are there any tests that exercise IPv6, ideally with IPv4 disabled so we can be sure that IPv6 continues to work / doesn't regress?

@mailzyok
Copy link

Does Istio CNI plugin support IPv6, according to the README.md from CNI, only IPv4 is supported.

Thanks.

@howardjohn
Copy link
Member

#15281

@knrc
Copy link

knrc commented Nov 7, 2019

@howardjohn Are there any other outstanding tasks for IPv6 support?

@howardjohn
Copy link
Member

@knrc what is missing is testing, which means I can't really answer that confidently 🙂. However, in theory its supposed to work now, but I am not sure if that is true today and was ever actually true in the past

@sbezverk
Copy link
Contributor

sbezverk commented Nov 7, 2019

@knrc I still have k8s/istio pure ipv6 cluster up and running, but I agree with @howardjohn testing is missing. since there was no too much interest in ipv6, attempts to build k8s kind ipv6 cluster and run istio on have halted.

@knrc
Copy link

knrc commented Nov 7, 2019

@howardjohn @sbezverk Great, I think this is something we will be able to help out with in that case. I'm not sure about creating a k8s IPv6 kind cluster since we will largely be focussing our work on OpenShift but I can get someone to at least look at its feasibility and see if we can contribute that back.

@aojea
Copy link
Contributor

aojea commented Nov 7, 2019

@howardjohn @sbezverk Great, I think this is something we will be able to help out with in that case. I'm not sure about creating a k8s IPv6 kind cluster since we will largely be focussing our work on OpenShift but I can get someone to at least look at its feasibility and see if we can contribute that back.

We have ipv6 testing jobs running in kind, it should not be difficult run istio on top, is this something we can set up? I can help here

@howardjohn
Copy link
Member

@aojea the problem is not Kind, but the underlying node. This is my understand, and correct me if I am wrong:

  • We currently run jobs on GKE cOS which does not have IPv6 support
  • Kind can support ipv6 as long as the underlying node supports IPv6
  • We could run ipv6 tests in kind if we had a node pool with IPv6 (could be one dedicated for this or not)
  • Kubernetes project has the same problem, and has a dedicated node pool for IPv6

@sbezverk
Copy link
Contributor

sbezverk commented Nov 7, 2019

@aojea Please share steps to bring up a multinode (preferably 3 node) ipv6 k8s cluster in kind.

@aojea
Copy link
Contributor

aojea commented Nov 7, 2019

@aojea Please share steps to bring up a multinode (preferably 3 node) ipv6 k8s cluster in kind.

https://kind.sigs.k8s.io/docs/user/quick-start/#ipv6-clusters

@chrstnwhlrt
Copy link

Just to clarify: Is it possible to receive IPv6 ingress requests (e.g. using the istio ingress gateway with NodePort on an IPv6 enabled server) if the cluster is in IPv4 mode? In out evaluation cluster all incoming IPv6 requests keep hanging but the port is open for IPv6 (as stated by netstat) - IPv4 request are successfully routed as expected.

@howardjohn
Copy link
Member

Steps to get things testing on ipv6:

Set up this in our docker environment: https://github.com/kubernetes/test-infra/blob/d96ae1300d79fc134d7ad2b28663f94bbbbb7e3d/images/krte/wrapper.sh#L55-L65. This will require changes to https://github.com/istio/tools/blob/master/docker/build-tools/prow-entrypoint.sh most likely?

set the ipv6 kind config: https://kind.sigs.k8s.io/docs/user/quick-start/#ipv6-clusters . Add a config into https://github.com/istio/istio/tree/master/prow/config and make some minor tweaks to

#!/bin/bash
to support explicitly setting the prow config to use

Add a new job to https://github.com/istio/test-infra/blob/master/prow/config/jobs/istio.yaml. I suggest just adding one like distroless https://github.com/istio/test-infra/blob/master/prow/config/jobs/istio.yaml#L74-L81 - the name would be integ-ipv6-k8s-tests, and it would run the same test.integration.kube.reachability which is a simple smoke test. Mark it modifiers: [optional, hidden] at first to ensure things work.

After that thing should be running smoothly if it all goes according to plan?

@aojea
Copy link
Contributor

aojea commented Mar 10, 2020

/assign
Thanks @howardjohn, will try to get this working

@howardjohn
Copy link
Member

I think this is considered done. We will track improving testing in #23473

@Olena273
Copy link

Is there a timeline for IPv6 in ISTIO getting to beta status (it's currently marked as alpha here )?

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests